python里運(yùn)用私有屬性和方法總結(jié)
如何在PYTHON里運(yùn)用私有屬性和方法
class File:
def __init__(self, name):
self.name = name
self.code = "ABCDEF"
file_A = File("file_A")
#假設(shè)我們有一個(gè)類,叫做文件類,設(shè)置一個(gè)對(duì)象file_A。

file_A.code
#如果直接調(diào)用屬性,是可以看到屬性里面有什么,但是如果這是個(gè)機(jī)密的密碼不能公布,是不能這么處理的。

class File:
def __init__(self, name):
self.name = name
self.__code = "ABCDEF"
file_A = File("file_A")
print(file_A.code)
#如果不想密碼公布,可以對(duì)屬性的名稱加上__,但是這里出錯(cuò)了。

class File:
def __init__(self, name):
self.name = name
self.__code = "ABCDEF"
file_A = File("file_A")
print(file_A.__code)
#很多人以為是因?yàn)橥獠康拿Q打少了__,但是這里依舊出錯(cuò)了,那是因?yàn)檫@是私有的屬性。

class File:
def __init__(self, name):
self.name = name
self.__code = "ABCDEF"
def open(self):
print("This is the AAA file!")
file_A = File("file_A")
file_A.open()
#除了屬性,方法也能私有嗎?答案是可以的。

class File:
def __init__(self, name):
self.name = name
self.__code = "ABCDEF"
def __open(self):
print("This is the AAA file!")
file_A = File("file_A")
file_A.__open()
#私有方法以后,看出來(lái)和私有屬性的返回結(jié)果是一致的。

class File:
def __init__(self, name):
self.name = name
self.__code = "ABCDEF"
def __open(self):
print("This is the AAA file!")
file_A = File("file_A")
print(file_A._File__code)
file_A._File__open()
#在PYTHON里面如果在方法和屬性那里加上_類名是可以看到私有的屬性和方法的。

知識(shí)點(diǎn)擴(kuò)展:
python默認(rèn)的成員函數(shù)和成員變量都是公開的,python 私有屬性和方法沒有類似別的語(yǔ)言的public,private等關(guān)鍵詞來(lái)修飾。 在python中定義私有變量只需要在變量名或函數(shù)名前加上 "__"兩個(gè)下劃線,那么這個(gè)函數(shù)或變量就會(huì)為私有的了。 在內(nèi)部,python使用一種 name mangling 技術(shù),將 __membername替換成 _classname__membername,所以你在外部使用原來(lái)的私有成員的名字時(shí),會(huì)提示找不到。 比如:
class Person: def __init__(self): self.__name = 'haha'#私有屬性 self.age = 22 def __get_name(self):##私有方法 return self.__name def get_age(self): return self.age person = Person() print person.get_age() print person.__get_name() 運(yùn)行結(jié)果是:22 Traceback (most recent call last): File "E:\pythoner\zenghe\jay.py", line 38, in print person.__get_name() AttributeError: Person instance has no attribute '__get_name'
我們這里定義的__name是私有屬性,__get_name()是私有方法。如果直接訪問的話,會(huì)提示找不到相關(guān)的屬性或者方法,但是如果你真要訪問私 有的相關(guān)數(shù)據(jù)的話, 也是可以訪問的,嚴(yán)格地說,私有方法在它們的類外是可以訪問的,只是不容易 處理。在 Python 中沒有什么是真正私有的;在內(nèi)部,私有方法和屬性的名字被忽然改變和恢復(fù),以致于使得它們看上去用它們給定的名字是無(wú)法使用的
相關(guān)文章
Pycharm Available Package無(wú)法顯示/安裝包的問題Error Loading Package Li
這篇文章主要介紹了Pycharm Available Package無(wú)法顯示/安裝包的問題Error Loading Package List解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Pyqt5 關(guān)于流式布局和滾動(dòng)條的綜合使用示例代碼
這篇文章主要介紹了Pyqt5 關(guān)于流式布局和滾動(dòng)條的綜合使用示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
解決Django migrate不能發(fā)現(xiàn)app.models的表問題
今天小編就為大家分享一篇解決Django migrate不能發(fā)現(xiàn)app.models的表問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-08-08

