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

 

posted @ 2023-06-07 10:44  万溪汇海  阅读(63)  评论(0编辑  收藏  举报