访问控制
访问控制指的是:控制类对象的属性和方法在类对象的外部是否可以直接访问
如果再类对象的某个属性和方法前添加两个下划线__,那么在类对象的外部就不能直接访问该属性和方法
#-*-coding:utf-8-*- #@author :vict #@Time :2020-4-1 22:47 #@File :test1 #@software :PyCharm class Myclass(object): def __init__(self): self.__pia = 18 def __pim(self): print("__pim被调用") def do_sth(self): print(self.__pia) self.__pim() mc = Myclass() # print(mc.__pia)# AttributeError: 'Myclass' object has no attribute '__pia' # mc.__pim() # AttributeError: 'Myclass' object has no attribute '__pim' mc.do_sth() """ 之所以不能在类对象的外部直接访问以下划线开头的属性或方法,是因为:python解释器对外把 属性或方法__xxx改成了另外一个名字:_类名__xxx。所以,在类对象的外部仍然可以通过_类名__xxx 访问属性和方法__xxx。但是,强烈建议不要这样访问。因为不同版本的python解析器可能会把属性或方法 __xxx改成不同名字。 """ print(mc._Myclass__pia) print(mc._Myclass__pim()) # 调用内置函数dir()获得指定对象所有可以访问的属性和方法 print(dir(mc)) """ 仍然可以在类对象的外部动态绑定名为__XXX的属性或方法,这与类对象内部名为__xxx的属性和方法 是不同的 """ mc.__pia = "Hi" print(mc.__pia) """ 除了在类对象的属性或方法前添加两个下划线__,还可以在类对象的属性或方法前添加单下划线_, 这表示:虽然可以在类对象的外部访问该属性或方法,但最好不要访问。 """ class SomeClass(object): def __init__(self): self._pia = 18 def _pim(self): print("_pim()被调用了") sc = SomeClass() print(sc._pia) sc._pim()
来源:https://www.cnblogs.com/huanyinglvtuan/p/12637949.html