Herencia en Python | Conjunto 2

| | | | | | | | | |

Python tiene 2 funciones integradas que están relacionadas con la herencia. Ellos son:

1. isinstance (): comprueba el tipo del objeto. Su sintaxis es:
isinstance (object_name, class_name)
Devolvería Verdadero, si la clase object_name es class_name, de lo contrario False.
Por ejemplo :


# Código Python para issubclass() demo


imprimir ( esinstancia ( 5 , int ))

Salir:

Verdadero 

El código anterior mostrará el siguiente resultado:
Verdadero
Esto se debe a que 5 es un número entero y, por lo tanto, pertenece a la clase int.
NOTA. Int es un tipo y una clase en Python.

2. issubclass (): comprueba si una clase en particular es hija de otra clase o no. Su sintaxis es:
issubclass (childclass_name, parentclass_name)
Devolvería True si la clase secundaria inyectada se deriva de la clase principal inyectada; de lo contrario, devolvería False .
Por ejemplo:


# Código Python para issubclass() demo

clase 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))

Salir:

Verdadero 

El código anterior mostrará el siguiente resultado:
Verdadero

Herencia múltiple:
Cuando una clase hereda de varias clases principales, se denomina herencia múltiple. Funciona igual que la herencia simple.


Salir:

método1 de clase B método1 de la clase A 

El código llama al método1 de la clase B, no al A porque Python busca la función de abajo hacia arriba.
Si desea llamar al método1 de la clase A, reemplace self.método1 () con A.method1 (self).
El procedimiento anterior para anular métodos funciona en clases de estilo antiguo, que son clases en las que la clase principal no hereda de & # 39; objeto & # 39; class.
Para las clases de nuevo estilo donde la clase padre hereda de la clase de objeto incorporada, existe otro procedimiento para anular los métodos.
El método super () nos ayuda a anular los métodos en las clases de nuevo estilo. Su sintaxis es la siguiente:
super (class_name, instance_) from_class) .overridden_method_name ()
Supongamos que hay 3 clases A, B y C. Las 3 tienen una función genérica llamado & # 39; método1 & # 39 ;. Super () está funcionando aquí.


class A ( objeto ):

def function1 ( self ):

imprimir `función de clase A`

class B (A):

def function1 ( self ):

print `función de la clase B`

súper (B, self ). function1 ()

class C (B):

def función1 ( self ) :

print `función de clase C`

super (C, self ).function1 ()

j = C ()

j.function1 ()

Salir:

función de clase C función de clase B función de clase A 

Param El "auto" éter en una superfunción actúa como un objeto de la clase padre y por lo tanto llama a la función 1 de la clase padre.

# código de Python para demostrar la herencia múltiple


# primera clase principal

clase Persona ( objeto ):

def __ init __ ( self , nombre, idnumber):

self . nombre = name

self . idnumber = idnumber


# segunda clase principal

class Employee ( object ):

def __ init __ ( self , salario, cargo):

self . salario = salario

auto . publicar = publicar


# heredar de ambas clases principales

class Líder (Persona, Empleado):

def __ init __ ( self , nombre, idnumber, salario, puesto, puntos):

self .puntos = puntos

Persona .__ init __ ( self , nombre, número de identificación) < / p>

Empleado .__ init __ ( self , salario, puesto)

Salida:

 

W Al instanciar una clase, asegúrese de que la secuencia en la que pasa los parámetros a la función coincida con la línea de secuencia dentro de la clase. Por ejemplo, en el código anterior, si necesitamos generar una instancia, escribiríamos

ins = Leader (`Rahul`, 882016, 75000,` Assistant Manager`, 560) 

Si intercambia la secuencia 75000 y "Subgerente", el código recibirá "Subgerente" como salario y 75000 como puesto.
Mírese.


< borde de la tabla = "0" relleno de celdas = "0" espaciado de celdas = "0" >

# primera clase principal

clase Persona ( objeto ):

def __ init __ ( self , name, idnumber):

self . nombre = name

self . idnumber = idnumber


# segundo padre

class Employee ( objeto < /código> ):

def __ init __ ( self , salario, puesto):

self . salario = salario

auto . publicar = publicar


# heredar de ambas clases principales

class Líder (Persona, Empleado):

def __ init __ ( self , nombre, número de identificación, salario, cargo, puntos):

self . puntos = puntos

Persona .__ init__ ( self , nombre, idnumber)

Empleado .__ init __ ( self , salario, puesto)

print ( self < código clase = "simple">. salario)


ins = Líder ( `Rahul` , 882016 , `Subgerente` , 75000 , 560 )

Salir:

Asistente de Gerente 

Anular métodos:
Anular un método significa anular un método en una subclase cuando ya está definido en alguna otra clase.
Un método en una subclase se llamará como anulado solo si existe 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 de superclase privado que tiene un guión bajo doble delante de su nombre.
Por ejemplo:


# Clase base

clase A ( objeto ):

def __ init __ ( código propio> ):

constante1 = 1

def método1 ( < código clase ="color1 "> self ):

imprimir ( ` método1 de la clase A` )

clase B (A):

def __ init __ ( self ):

constante2 = 2

self . llamada1 ()

A. __init __ ( self )

def método1 ( self ):

imprimir ( `método1 de la clase B` )

def llamada1 ( self ):

self . método1 ()

A.method1 ( self )

b = B ()