码迷,mamicode.com
首页 > 编程语言 > 详细

Python - 私有属性(双下线的变形)

时间:2018-07-12 00:30:58      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:pre   print   rom   block   from   int   访问   绑定   原理   

__x会自动变形为_类名__x

正常情况

class A:

    def foo(self):
        print(‘from A‘)

    def test(self):
        self.foo()


class B(A):

    def foo(self):
        print(‘from B‘)

b = B()
b.test()
# from B

把foo定义成私有

class A:

    def __foo(self):    #双下线私有属性在定义时就变形为_A__fa
        print(‘from A‘)

    def test(self):
        self.__foo()    #调用变形后的私有属性对象,即_A__fa


class B(A):

    def __foo(self):
        print(‘from B‘)

b = B()
b.test()
# from A

原理:父类的__x私有属性在定义时已经变形为_父类__x,子类可以继承这个属性,但无法覆盖。所以test()里面的self.__foo的self已经绑定了父类,子类的__foo()无法覆盖。

class A:

    def __foo(self):    #双下线私有属性在定义时就变形为_A__fa
        print(‘from A‘)

    def test(self):
        self.__foo()    #调用变形后的私有属性对象,即_A__fa


class B(A):

    def __foo(self):
        print(‘from B‘)

b = B()
b._A__foo()
# from A

Python的私有属性的缺点

这种变形并没有真正限制从外部直接访问属性

class A:

    def __foo(self):
        print(‘from A‘)

    def test(self):
        self.__foo()

a = A()
a._A__foo()

Python - 私有属性(双下线的变形)

标签:pre   print   rom   block   from   int   访问   绑定   原理   

原文地址:https://www.cnblogs.com/allen2333/p/9297317.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!