Herencia de Python
Herencia de Python
La herencia nos permite definir una clase que hereda todos los métodos y propiedades de otra clase.
La clase principal es la clase de la que se hereda, también llamada clase base.
La clase secundaria es la clase que hereda de otra clase, también llamada clase derivada.
Crear una clase principal
Cualquier clase puede ser una clase principal, por lo que la sintaxis es la misma que para crear cualquier otra clase:
Ejemplo
Cree una clase llamada Person
, con
propiedades y un firstname
método :lastname
printname
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname,
self.lastname)
#Use the Person class to create an object, and then
execute the printname method:
x = Person("John", "Doe")
x.printname()
Crear una clase secundaria
Para crear una clase que herede la funcionalidad de otra clase, envíe la clase principal como parámetro al crear la clase secundaria:
Ejemplo
Cree una clase llamada Student
, que heredará las propiedades y métodos de la Person
clase:
class Student(Person):
pass
Nota: utilice la pass
palabra clave cuando no desee agregar otras propiedades o métodos a la clase.
Ahora la clase Estudiante tiene las mismas propiedades y métodos que la clase Persona.
Ejemplo
Use la Student
clase para crear un objeto y luego ejecute el printname
método:
x = Student("Mike", "Olsen")
x.printname()
Agregue la función __init__()
Hasta ahora hemos creado una clase secundaria que hereda las propiedades y métodos de su padre.
Queremos agregar la __init__()
función a la clase secundaria (en lugar de la pass
palabra clave).
Nota: La __init__()
función se llama automáticamente cada vez que la clase se usa para crear un nuevo objeto.
Ejemplo
Agregue la __init__()
función a la
Student
clase:
class Student(Person):
def __init__(self, fname, lname):
#add properties etc.
Cuando agrega la __init__()
función, la clase secundaria ya no heredará la __init__()
función principal.
Nota: La __init__()
función del hijo anula la herencia de la
__init__()
función del padre.
Para mantener la herencia de la __init__()
función principal, agregue una llamada a la __init__()
función principal:
Ejemplo
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
Ahora hemos agregado con éxito la función __init__() y conservamos la herencia de la clase principal, y estamos listos para agregar funcionalidad en la
__init__()
función.
Usa la función super()
Python también tiene una super()
función que hará que la clase secundaria herede todos los métodos y propiedades de su padre:
Ejemplo
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
Al usar la super()
función, no tiene que usar el nombre del elemento principal, automáticamente heredará los métodos y propiedades de su elemento principal.
Agregar propiedades
Ejemplo
Agregue una propiedad llamada graduationyear
a la
Student
clase:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear
= 2019
En el ejemplo a continuación, el año 2019
debe ser una variable y pasarse a la
Student
clase al crear objetos de estudiante. Para hacerlo, agregue otro parámetro en la función __init__():
Ejemplo
Agregue un year
parámetro y pase el año correcto al crear objetos:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
x = Student("Mike", "Olsen", 2019)
Añadir métodos
Ejemplo
Agregue un método llamado welcome
a la
Student
clase:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
def welcome(self):
print("Welcome",
self.firstname, self.lastname, "to the class of", self.graduationyear)
Si agrega un método en la clase secundaria con el mismo nombre que una función en la clase principal, se anulará la herencia del método principal.