0
点赞
收藏
分享

微信扫一扫

面向对象 继承 同名实例函数被覆盖 实例变量则根据实际运行顺序而定

class Class_1():
    def __init__(self):
        self.var_1 = '父属性'  # *
        self.var_2 = '父属性'
        self.fun_1()  # 第一次输出
    def fun_1(self):
        print('父方法')
        print(self.var_1)
        print(self.var_2)
class Class_2(Class_1):
    def __init__(self):
        super().__init__()  # 调用父类的构造方法
        self.var_1 = '子属性'
        self.fun_1()  # 第二次输出
        self.var_2 = '子属性'
    def fun_1(self):
        print('子方法')
        print(self.var_1)  # *如果置于实例方法之后,会引发错误 AttributeError: 'Class_2' object has no attribute 'var_1'
        print(self.var_2)
obj_test = Class_2()
print(r'''===解释===
子方法  调用子类的构造方法(11),调用父类的构造方法(12),调用行(3-5),同名实例方法被子类(16)覆盖
父属性  引用行(3)
父属性  引用行(4)
子方法  调用行(13),调用实例方法(14),其中同名实例属性被子类(13)覆盖,调用行(15)
子属性  引用行(13)
父属性  引用行(4)
==========''')

结论

同名实例函数被覆盖

实例变量则根据实际运行顺序而定

举报

相关推荐

0 条评论