Herencia en Python | conjunto 2

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))
Producción:

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))
Producción:

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)   
Producción:

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)
Producción:

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()
Producción:

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()
Producción:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *