python超类
1.超类
什么是超类:super方法调用的一系列类
什么时候用到超类?
如果子类需要复用父类的代码(属性,方法)时,需要通过超类实现
class A: class_name="A" #类的属性 def __init__(self,name,age): self.name=name #实例属性 self.age=age #实例属性 def show_me(self): print(f"hello,我的name是{self.name},我的年龄是{self.age}") a=A("王舞",18) a.show_me() class B(A): #继承实现扩展 class_name = "B" def __init__(self,country,*args,**kwargs): self.country=country super().__init__(*args, **kwargs) # 通过超类,实现对父类代码的复用
super是不是代表父类?
super()是一个内置函数,返回了超类
沿着继承关系,从祖上一系列类中,寻找成员
super不是代表父类
super能不能跳过父类?
super 可以接受参数:
从哪个类的祖先中查找成员
传递实例对象
class A: class_name="A" #类的属性 def __init__(self,name,age): self.name=name #实例属性 self.age=age #实例属性 def show_me(self): print(f"hello,我的name是{self.name},我的年龄是{self.age}") a=A("王舞",18) a.show_me() class B(A): #继承实现扩展 class_name = "B" def __init__(self,country,*args,**kwargs): self.country=country super().__init__(*args, **kwargs) # 通过超类,实现对父类代码的复用 class C(B): class_name="C" def show_class_name(self): print("自己的class_name属性",self.class_name) print("继承来的class_name属性",super().class_name) #超类的class_name print("跳过父类后的class_name属性",super(B,self).class_name) super(B,self).show_me() b=B(country='china',name="张三",age=19) b.show_me() c=C(country='china',name="李四",age=20) c.show_class_name()
如何知道类和类的继承关系:print(类名.__mro__)
print(C.__mro__) #(<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)