Herencia y polimorfismo de las clases de python
- Funcionalidad de los tipos primitivos obtenidos por herencia
- Lo que se hereda se llama clase base o clase padre, y lo que se hereda se llama subclase.
- La subclase (heredera) tiene todos los métodos y atributos de clase de la clase padre (heredada)
- La clase principal (heredada) no tiene las propiedades y métodos de la subclase (heredadora)
- Si la subclase hereda el método de la clase principal y la subclase también tiene el mismo método, el método de la subclase entra en vigor y puede usarlo para reescribir el método heredado (polimorfismo de la clase )
示例
class Parent:#默认继承object类
name = "father"
age = 56
moneys = "1000w"
def __init__(self) -> None:
pass
# self.name = "father"
# self.age = 56
# self.moneys = "1000w"
def behaver(self):
print("{}老了走不动了".format(self.age))
def money(self):
print("我继承了爸爸的money{}".format(self.moneys))
class children(Parent):#继承父类,参数可以是多个父类 就是多重继承
def __init__(self) -> None:
self.name = "child"
self.age = 26
def behaver(self):
print("{}年轻健步如飞".format(self.age))
def money2(self):
print("我没有money,")
# parent1 = Parent()
# parent1.behaver()
child1 = children()#实例化child类
child1.money() #继承了父类的money
#类的多态
child1.behaver()#26年轻健步如飞 因为方法名和属性名一致 所以重新了父类的方法
función súper ()
- Ejecutar el constructor de la clase padre en el constructor de la subclase y pasar parámetros
- super (nombre de la subclase, self) El método de la clase principal y puede pasar parámetros
class Parent:
def __init__(self, money) -> None:
self.name = "father2"
self.age = 54
self.moneys = money
def money(self):
print("我继承了爸爸的money{}".format(self.moneys))
class children(Parent):
def __init__(self) -> None:
super(children, self).__init__("5000w") # 实例化的时候执行父类的构造函数
self.name = "child"
self.age = 26
def money2(self):
print("我没有money,")
child1 = children()
child1.money() # 继承了爸爸的money5000w
funciones de orden superior en una clase
Nombre de la función | uso | valor de retorno |
---|---|---|
_ cadena _() | Generalmente devuelve la información de descripción de la clase (los ejemplos son los siguientes) | una pieza de información descriptiva |
_ getattr _(auto,clave) | Key llama a cualquier nombre de atributo no existente (key) y devolverá un mensaje de aviso | Puede ser informativo o no devuelto |
_ setattr _(auto,clave,valor) | Interceptar atributos y valores que no existen en la clase actual, y puede realizar algún procesamiento | dispensable |
_ llamar _ | Pasar parámetros a un objeto de instancia de una clase activará | dispensable |
__str__
class text:
def __str__(self) -> str:
return "这是一个测试类"
print(text()) #这是一个测试类
__getattr__
class text2:
def __getattr__(self, key) -> Any:
print("当前的这个变量:{}不存在".format(__name))
a = text2()
a.rte #当前的这个变量:rte不存在
__setattr__
class text3:
def __init__(self, name) -> None:
self.name = name
#拦截当前类中不存在的属性与值,如果不存在 就添加
def __setattr__(self, key: str, value: Any) -> None:
if key not in self.__dict__:
self.__dict__[key] = value
t3 = text3("wsm")
t3.age = "123"
print(t3.name)#wsm
print(t3.age)#123
__call__
class text:
def __call__(self, **kwargs) -> None:
print("这是一个__call__", kwargs)
t = text()
t(name="dweiwei")#这是一个__call__ {'name': 'dweiwei'}