Herencia de Python

Herencia de Python

La herencia nos permite definir una clase que hereda todos los métodos y propiedades de otra clase.

Clase baseEs una clase heredada, también conocida como clase base.

SubclaseEs una clase que se hereda de otra clase, también conocida como clase derivada.

Crear una clase base

Cualquier clase puede ser una clase base, por lo tanto, la sintaxis es la misma que para crear cualquier otra clase:

Agregar método

Crear una clase llamada Person que contenga las propiedades firstname y lastname y el método printname:

class Person:
  def __init__(self, fname, lname):
    self.firstname = fname
    self.lastname = lname
  def printname(self):
    print(self.firstname, self.lastname)
# Crear un objeto con Person y luego ejecutar el método printname:
x = Person("Bill", "Gates")
x.printname()

Ejecutar ejemplo

Crear una subclase

Para crear una clase que herede funciones de otras clases, envíe el padre como parámetro al crear la subclase:

Agregar método

Crear una clase llamada Student que herede las propiedades y métodos de la clase Person:

class Student(Person):
  pass

Nota:Si no desea agregar más propiedades o métodos a la clase, utilice pass palabra clave.

Ahora, la clase Student tiene las mismas propiedades y métodos que la clase Person.

Agregar método

Crear un objeto con la clase Student y luego ejecutar el método printname:

x = Student("Elon", "Musk")
x.printname()

Ejecutar ejemplo

Agregar la función __init__()

Hasta ahora, hemos creado una subclase que hereda las propiedades y métodos de la clase padre.

Queremos que __init__() función se agrega a la subclase (no pass palabra clave).

Nota:Cada vez que se utiliza la clase para crear un nuevo objeto, se llama automáticamente la función __init__().

Agregar método

Agregar la función __init__() a la clase Student:

class Student(Person):
  def __init__(self, fname, lname):
    # Agregar propiedades, etc.

Cuando agrega la función __init__(), la subclase ya no heredará la función __init__() del padre.

Nota:La función __init__() del hijo sobrescribe la herencia de la función __init__() del padre.

Para mantener la herencia de la función __init__() del padre, agregue la llamada a la función __init__() del padre:

Agregar método

class Student(Person):
  def __init__(self, fname, lname):
    Person.__init__(self, fname, lname)

Ejecutar ejemplo

Ahora que hemos agregado con éxito la función __init__() y hemos conservado la herencia de la clase padre, estamos listos para agregar funcionalidades en la función __init__().

usando la función super()

Python también tiene super() hace que la subclase herede todos los métodos y propiedades del padre:

Agregar método

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)

Ejecutar ejemplo

Al usar la función super() función, no es necesario usar el nombre del elemento padre, se heredarán automáticamente los métodos y propiedades de su elemento padre.

Agregar propiedades

Agregar método

Añadir una instancia graduationyear las propiedades del Student clase:

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)
    self.graduationyear = 2019

Ejecutar ejemplo

self.graduationyear = 2019

Agregar método

En este ejemplo, 2019 debería ser una variable y pasarla a la clase Student al crear el objeto student. Para esto, agregue otro parámetro en la función __init__(): def __init__(self, fname, lname, Añadir

class Student(Person):
  parámetros, y pasar el año correcto al crear el objeto: def __init__(self, fname, lname,año
    super().__init__(fname, lname)
    self.graduationyear = year
)

Ejecutar ejemplo

x = Student("Elon", "Musk", 2019)

Agregar método

Añadir una instancia welcome Añadir al método de la clase Student:

class Student(Person):
  def __init__(self, fname, lname, year):
    super().__init__(fname, lname)
    self.graduationyear = year
  def welcome(self):
    print("Bienvenido", self.firstname, self.lastname, "a la clase de", self.graduationyear)

Ejecutar ejemplo

Consejo:Si agrega un método con el mismo nombre que el de la clase padre en la subclase, se sobrescribirá la herencia del método padre.