__init_subclase__ en Python

Requisitos previos : clases y objetos de Python , herencia en Python

Independientemente de los lenguajes de programación, la herencia es uno de los temas más importantes en los conceptos de programación orientada a objetos. La herencia es un concepto de definir una clase en términos de otra clase. Según la herencia, sabemos que una referencia de superclase puede contener su referencia de subclase. Todos sabemos que el comportamiento de la superclase puede modificarse según la implementación de su(s) subclase(s).

Pero ahora, podemos alterar el comportamiento de la(s) subclase(s) usando __init_subclass__

__init_subclase__

# defining a SuperClass
class SuperClass:
  
     # defining __init_subclass__ method
    def __init_subclass__(cls, **kwargs):
        cls.default_name ="Inherited Class"
  
# defining a SubClass
class SubClass(SuperClass):
  
     # an attribute of SubClass
    default_name ="SubClass" 
    print(default_name)
  
subclass = SubClass()
print(subclass.default_name)

Producción :

SubClass
Inherited Class

Entendiendo el código

  • En el ejemplo anterior, hay 2 clases (es decir, Super Class y SubClass) y SubClass se hereda de SuperClass. default_name es un atributo de SubClass.
  • SuperClass modifica el valor del atributo default_name mediante el uso del método __init_subclass__ .
  • cls se refiere a las subclases que se heredan. Los argumentos de palabras clave (**kwargs) que se asignan a una nueva clase se pasan a la clase principal __init_subclass__.
  • Para la compatibilidad con otras subclases que usan __init_subclass__, uno debe sacar los argumentos de palabras clave necesarios y pasar los demás a la clase base (Super Class).

Esta __init_subclass__clase de decorador se parece mucho. Pero donde los decoradores de clase solo afectan la clase específica a la que se aplican, __init_subclass__solo se aplica a las subclases futuras de la clase que define el método. Significa que podemos alterar/definir el comportamiento de cualquier clase nueva que se herede de la superclase.
Ejemplo:

# defining a SuperClass
class SuperClass:
    def __init_subclass__(cls, default_name, **kwargs):
        cls.default_name = default_name
  
# defining a subclass
class SubClass1(SuperClass, default_name ="SubClass1"):
    pass
  
# defining another subclass
class SubClass2(SuperClass, default_name ="SubClass2"):
    default_name = "InheritedClass"
  
  
# references for subclasses
subClass1 = SubClass1()
subClass2 = SubClass2()
  
print(subClass1.default_name)
print(subClass2.default_name)

Producción :

SubClass1
SubClass2

Por esto podemos concluir que el método __init_subclass__ se usa para alterar el comportamiento de las subclases que pueden crearse en el futuro.

Publicación traducida automáticamente

Artículo escrito por arwinirahulkumar 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 *