Python Language Herencia basica


Ejemplo

La herencia en Python se basa en ideas similares utilizadas en otros lenguajes orientados a objetos como Java, C ++, etc. Una nueva clase puede derivarse de una clase existente de la siguiente manera.

class BaseClass(object):
    pass

class DerivedClass(BaseClass):
    pass

BaseClass es la clase ya existente ( principal ), y DerivedClass es la nueva clase ( secundaria ) que hereda (o subclases ) atributos de BaseClass . Nota : a partir de Python 2.2, todas las clases heredan implícitamente de la clase de object , que es la clase base para todos los tipos incorporados.

Definimos una clase de Rectangle principal en el siguiente ejemplo, que se hereda implícitamente del object :

class Rectangle():
    def __init__(self, w, h):
        self.w = w
        self.h = h
    
    def area(self):
        return self.w * self.h
        
    def perimeter(self):
        return 2 * (self.w + self.h)

La clase Rectangle se puede usar como una clase base para definir una clase Square , ya que un cuadrado es un caso especial de rectángulo.

class Square(Rectangle):
    def __init__(self, s):
        # call parent constructor, w and h are both s
        super(Square, self).__init__(s, s)
        self.s = s

La clase Square heredará automáticamente todos los atributos de la clase Rectangle , así como la clase de objeto. super() se utiliza para llamar al __init__() de la clase Rectangle , esencialmente llamando a cualquier método anulado de la clase base. Nota : en Python 3, super() no requiere argumentos.

Los objetos de clase derivados pueden acceder y modificar los atributos de sus clases base:

r.area()
# Output: 12
r.perimeter()  
# Output: 14

s.area()
# Output: 4
s.perimeter()
# Output: 8

Funciones incorporadas que funcionan con herencia.

issubclass(DerivedClass, BaseClass) : devuelve True si DerivedClass es una subclase de BaseClass

isinstance(s, Class) : devuelve True si s es una instancia de Class o cualquiera de las clases derivadas de Class

# subclass check        
issubclass(Square, Rectangle)
# Output: True

# instantiate
r = Rectangle(3, 4)
s = Square(2)

isinstance(r, Rectangle)  
# Output: True
isinstance(r, Square)
# Output: False
# A rectangle is not a square

isinstance(s, Rectangle)
# Output: True
# A square is a rectangle
isinstance(s, Square)
# Output: True