Requisito previo: conceptos básicos de herencia en Python , Herencia, ejemplos de objeto, issubclass y super
Hay 2 funciones integradas en Python que están relacionadas con la herencia. Están:
1. isinstance(): Comprueba el tipo de un objeto. Su sintaxis es:
isinstance(object_name, class_name) Devolvería
True si la clase de object_name es class_name else False .
Por ejemplo:
# Python code to demonstrate issubclass() print(isinstance(5, int))
True
El código anterior mostraría el siguiente resultado:
Verdadero
Esto se debe a que 5 es un número entero y, por lo tanto, pertenece a la clase de int.
NOTA: ‘int’ es tanto un tipo como una clase en Python.
2. issubclass(): Comprueba si una clase específica es la clase secundaria de otra clase o no. Su sintaxis es:
issubclass(childclass_name, parentclass_name) Devolvería
True si la clase secundaria ingresada se deriva realmente de la clase principal ingresada; de lo contrario, devuelve False .
Por ejemplo:
# Python code to demonstrate issubclass() class A(): def __init__(self, a): self.a = a class B(A): def __init__(self, a, b): self.b = b A.__init__(self, a) print(issubclass(B, A))
True
El código anterior mostraría el siguiente resultado:
Verdadero
Herencia múltiple:
cuando una clase hereda de más de una clase principal, se denomina herencia múltiple. Funciona de la misma manera que la herencia única.
# Python code to demonstrate multiple inheritance # first parent class class Person(object): def __init__(self, name, idnumber): self.name = name self.idnumber = idnumber # second parent class class Employee(object): def __init__(self, salary, post): self.salary = salary self.post = post # inheritance from both the parent classes class Leader(Person, Employee): def __init__(self, name, idnumber, salary, post, points): self.points = points Person.__init__(self, name, idnumber) Employee.__init__(self, salary, post)
Al crear una instancia de una clase, asegúrese de que la secuencia en la que proporciona los parámetros a una función sea relevante para el bloque de la clase. Por ejemplo, en el código anterior, si tenemos que generar una instancia, escribiríamos
ins = Leader('Rahul', 882016, 75000, 'Assistant Manager', 560)
Si intercambia el puesto de secuencia de 75000 y ‘Subgerente’, el código tomaría ‘Subgerente’ como salario y 75000 como puesto.
Ver por ti mismo.
# first parent class class Person(object): def __init__(self, name, idnumber): self.name = name self.idnumber = idnumber # second parent class class Employee(object): def __init__(self, salary, post): self.salary = salary self.post = post # inheritance from both the parent classes class Leader(Person, Employee): def __init__(self, name, idnumber, salary, post, points): self.points = points Person.__init__(self, name, idnumber) Employee.__init__(self, salary, post) print(self.salary) ins = Leader('Rahul', 882016, 'Assistant Manager', 75000, 560)
Assistant Manager
Anular métodos:
anular un método significa redefinir un método en la subclase cuando ya se ha definido en alguna otra clase.
Un método en la subclase se llamará como anulado solo cuando exista otro método con el mismo nombre y el mismo conjunto de parámetros en la superclase.
Además, no podemos anular un método privado de una superclase, que es el que tiene guiones bajos dobles antes de su nombre.
Por ejemplo:
# Base Class class A(object): def __init__(self): constant1 = 1 def method1(self): print('method1 of class A') class B(A): def __init__(self): constant2 = 2 self.calling1() A. __init__(self) def method1(self): print('method1 of class B') def calling1(self): self.method1() A.method1(self) b = B()
method1 of class B method1 of class A
El código invoca el método 1 de la clase B y no A porque Python busca la función en el orden de abajo a arriba.
Si desea invocar el método1 de la clase A, reemplace self.method1() con A.method1(self).
El procedimiento anterior para anular métodos funciona en clases de estilo antiguo, que son las clases en las que la clase principal no hereda de la clase ‘objeto’.
Para las clases de estilo nuevo, donde la clase padre hereda de la clase ‘objeto’ integrada, existe otro procedimiento para anular métodos.
El método super() nos ayuda a anular métodos en nuevas clases de estilo. Su sintaxis es la siguiente:
super(class_name, instance_)of_class).overridden_method_name()
Supongamos que hay 3 clases A, B y C. Las 3 tienen una función común llamada ‘método1’. Aquí viene el trabajo de super().
class A(object): def function1(self): print 'function of class A' class B(A): def function1(self): print 'function of class B' super(B, self).function1() class C(B): def function1(self): print 'function of class C' super(C, self).function1() j = C() j.function1()
function of class C function of class B function of class A
El parámetro ‘self’ dentro de la super función actúa como el objeto de la clase principal y, por lo tanto, invoca la función 1 de la clase principal.
Publicación traducida automáticamente
Artículo escrito por ShivangiSrivastava1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA