python__和_区别_【Python】对_和__差别的理解
在其他語言中,屬性以_開頭一般用于表示這個屬性是私有屬性,不能在外部訪問。
在python中是不存在私有屬性這種說法的。以_開頭的屬性,只是表名是私有屬性,和API的調用沒有關系。但是也是可以調用的
classA():def __init__(self):
self._private= "am I private?"a=A()print(a._private)
# 結果
# ‘am I private?’
以_ _開頭的屬性,可以實現私有的功能。但它真正的用途是防止子類重寫該屬性。
classA():def __init__(self):
self.__private = "am I private?"a=A()print(a.__private)# Traceback (most recent call last):
# File "E:/WWW/py3/test/config.py", line 7, in
# print(a.__private)
# AttributeError: 'A' object has no attribute '__private'
_ _private屬性依舊可以被訪問。以上的調用報錯的原因,是調用錯了名字。
_ _實現防止子類重寫的原理,其實就是給屬性改一個名字。
我們用dir()函數可以看到
classA():def __init__(self):
self.__private = "am I private?"a=A()print(dir(a))#['_A__private', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__',
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
這個'_A__private'其實就是__private。為了防止復寫,給他改了個名字(總覺得這種處理方式有點萌哈哈哈哈)
所以如果想調用,甚至修改,只需要調用??a._A__private
但是別這么做啊!!!!
classA():def __init__(self):
self.__private = "am I private?"
deffunc(self):print(self.__private)
a=A()
a.func()
a._A__private= 'nonono'a.func()#am I private?#nonono
總結
以上是生活随笔為你收集整理的python__和_区别_【Python】对_和__差别的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大众途观23款l显示屏可以换主题吗?
- 下一篇: python中用来回溯异常的模块_pyt