Python Herencia
Herencia de Python
La herencia nos permite definir una clase que hereda todos los métodos y propiedades de otra clase.
Clase principal es la clase de la que se hereda, también llamada clase base.
Clase hija es la clase que hereda de otra clase, también llamada clase derivada.
Crear una clase para padres
Cualquier clase puede ser una clase principal, por lo que la sintaxis es la misma que la de crear cualquier otra clase:
Ejemplo
Cree una clase llamada propiedades Person
, con firstname
y lastname
y un método 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()
Inténtalo tú mismo »
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 clase Person
:
class Student(Person):
pass
Nota: Utilice la palabra clave pass
cuando no desee agregar ninguna otra propiedad o método a la clase.
Ahora la clase Student tiene las mismas propiedades y métodos que la clase Person.
Ejemplo
Utilice la clase Student
para crear un objeto y luego ejecute el método printname
:
x = Student("Mike", "Olsen")
x.printname()
Inténtalo tú mismo »
Agregue la función __init__()
Hasta ahora, hemos creado una clase secundaria que hereda las propiedades y métodos de su clase principal.
Queremos agregar la función __init__()
a la clase secundaria (en lugar de la palabra clave pass
).
Nota: La función __init__()
se llama automáticamente cada vez que se utiliza la clase para crear un nuevo objeto.
Ejemplo
Agregue la función __init__()
a la clase Student
:
class Student(Person):
def __init__(self, fname, lname):
#add properties etc.
Cuando agrega la función __init__()
, la clase secundaria ya no heredará la función __init__()
del padre.
Nota: La función __init__()
del niño anula la herencia del padre __init__()
función.
Para mantener la herencia de la función __init__()
del padre, agregue una llamada a la función __init__()
del padre:
Ejemplo
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
Inténtalo tú mismo »
Ahora hemos agregado con éxito la función __init__(), hemos mantenido la herencia de la clase principal y estamos listos para agregar funcionalidad en la función __init__()
.
Utilice la función super()
Python también tiene una función super()
que hará que la clase hija herede todos los métodos y propiedades de su clase padre:
Ejemplo
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
Inténtalo tú mismo »
Al utilizar la función super()
, no es necesario utilizar el nombre del elemento principal, este heredará automáticamente los métodos y propiedades de su elemento principal.
Agregar propiedades
Ejemplo
Agregue una propiedad llamada graduationyear
a la clase Student
:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear = 2019
Inténtalo tú mismo »
En el siguiente ejemplo, el año 2019
debe ser una variable y pasarse a la clase Student
al crear estudiante objetos. Para hacerlo, agregue otro parámetro en la función __init__():
Ejemplo
Agregue un parámetro year
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)
Inténtalo tú mismo »
Agregar métodos
Ejemplo
Agregue un método llamado welcome
a la clase Student
:
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)
Inténtalo tú mismo »
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.