Python继承之子类访问父类的私有属性和私有方法

通过继承,子类可以拥有父类的所有属性和方法。但是私有属性和私有方法是类对象的隐私,子类不会继承父类的私有属性和私有方法。

1)子类对象不能在自己方法内部直接访问父类的私有属性和私有方法,

class A:
    def __init__(self):
        self.name = '张三'
        self.__age = 21  # 私有属性

    def __display(self):  # 私有方法
        print(f'我是私有方法,{self.name} {self.__age}')

    def getAge(self):
        print('私有属性 __age = %d' % self.__age)  # 访问私有属性
        self.__display()  # 调用私有方法


class B(A):
    def test(self):
        print(f'我叫{self.name}')
        # 在子类中,不能直接访问父类的私有属性
        print('我在调用父类的私有属性:%d' % self.__age) # AttributeError: 'B' object has no attribute '_B__age'. Did you mean: '_A__age'?

        # 子类中不能访问父类的私有方法
        # self.__display()  # AttributeError: 'B' object has no attribute '_B__display'. Did you mean: '_A__display'?


b = B()
# 可以访问父类的公有属性
print(b.name)
# 在外界不能直接访问类的私有方法和私有属性
# print(b.__age)  # AttributeError: 'B' object has no attribute '__age'. Did you mean: '_A__age'?
# b.__display()   # AttributeError: 'B' object has no attribute '__display'. Did you mean: '_A__display'?
b.test()
图片[1]-Python继承之子类访问父类的私有属性和私有方法-尤尤'blog

我们可以看到父类 A 中的普通属性和普通方法,子类都可以直接使用,但是父类 A 中的私有属性和私有方法,子类无论是在方法内部还是外界,都无法直接使用。所以子类不会继承父类的私有属性和私有方法。

2)子类可以通过父类的公有方法间接的访问私有属性和私有方法。

父类的私有属性和私有方法可以在父类中通过 “self.” 直接使用。而通过继承,子类可以直接在方法内部访问父类的共有属性和公有方法,所以子类可以通过父类的公有方法间接的访问父类的私有属性和私有方法。

class A:
    def __init__(self):
        self.name = '张三'
        self.__age = 21  # 私有属性

    def __display(self):  # 私有方法
        print(f'我是私有方法,{self.name} {self.__age}')

    def getAge(self):
        print('私有属性 __age = %d' % self.__age)  # 访问私有属性
        self.__display()  # 调用私有方法


class B(A):
    def test(self):
        # 在子类中,直接访问父类的公有属性
        print(self.name)

        # 通过父类的公有方法访问父类的私有属性和私有方法
        self.getAge()


b = B()
# 可以访问父类的公有属性
print(b.name)
# 在外界不能直接访问类的私有方法和私有属性
# print(b.__age)
# b.__display()   # AttributeError: 'B' object has no attribute '__display'. Did you mean: '_A__display'?
b.test()
图片[2]-Python继承之子类访问父类的私有属性和私有方法-尤尤'blog
图片[3]-Python继承之子类访问父类的私有属性和私有方法-尤尤'blog
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容