如何实现python对象的私有成员?

2020年7月1日 / 3次阅读 / Last Modified 2020年7月1日
面向对象

python的面向对象语法比C++要简化了很多,比如类成员定义的时候,由于不需要实现申明,也就更没有private和public这样的关键词。有人说,python对象没有私有成员,这个说法,对也不对。

python对象的私有成员

双下划线开头的成员,不管是变量还是函数,都可以说是私有的,只能内部访问。

class test():
    def __init__(self):
        self.__foo = 'foo'
        self.__bar = 'bar'
        
    def show(self):
        self.__show()
        
    def __show(self):
        print(self.__foo)
        print(self.__bar)

        
t = test()
t.show()
t.__show()

t.show()会成功,但是t.__show()会失败,python系统提示:AttributeError: 'test' object has no attribute '__show'

同样,直接访问t.__foo和t.__bar,一样失败,一样提示没有此属性。

双下划线,就是实现python私有成员的方法。

如何访问python私有成员

虽然双下划线开头的成员是私有的,但是还是可以访问。

class test():
    def __init__(self):
        self.__foo = 'foo'
        self.__bar = 'bar'
        
    def show(self):
        self.__show()
        
    def __show(self):
        print(self.__foo)
        print(self.__bar)

        
t = test()
t.show()
t._test__show()
print(t._test__foo)
print(t._test__bar)

用一个下划线加类名再加成员名称,就可以访问了。不过,一般项目中极少会出现这样的情况。

更多的情况是,大家习惯使用一个下划线开头来暗示这是私有的,但是你要访问也行!大家都是成年人......

-- EOF --

本文链接:https://www.pynote.net/archives/2113

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top