類的私有屬性和方法 Python是個開放的語言,預設情況下所有的屬性和方法都是公開的 或者叫公有方法,不像C++和 Java中有明確的public,private 關鍵字來區分私有公有。 Python預設的成員函數和成員變數都是公開的,類的私有屬性指只有在類的內部使用的屬性或方法,表現形式為以“__ ...
類的私有屬性和方法
Python是個開放的語言,預設情況下所有的屬性和方法都是公開的 或者叫公有方法,不像C++和 Java中有明確的public
,private
關鍵字來區分私有公有。
Python預設的成員函數和成員變數都是公開的,類的私有屬性指只有在類的內部使用的屬性或方法,表現形式為以“__“ 屬性名或方法名以雙下劃線開頭。
class Test(object):
__count = 0 # 私有屬性 __count
def get_count(self):
return self.__count # 類的內部可以使用私有屬性
def set_count(self, value):
if self.__check_value(value): # 在類的內部調用類的私有方法
self.__class__.__count = value
def __check_value(self, value): # 定義類的私有方法 檢查參數
if isinstance(value, int):
return True
a = Test()
print(a.get_count())
a.set_count(100)
print(a.get_count())
#a.__check_value(10) # 調用私有方法會報錯
#print(a.__count) # 直接訪問私有屬性也會報錯
應用場景
對於一些敏感的數據,我們不希望直接被的函數調用,或者不希望草率的直接 object.key = value
來修改,我們可以選擇將屬性聲名為私有的,這樣從外部時無法訪問該屬性的,也就不能修改了,但是依然可以修改屬性字典的方法來修改。
# 當然 可以使用 @proprety
class Person(object):
__name = 'Monkey'
def update_name(self, name):
self.__name = name
def get_name(self):
return self.__name
p = Person()
p.update_name('BlackMonkey')
print(p.get_name()) # BlackMonkey
print(p.__name) # 報錯 AttributeError: 'Person' object has no attribute '__name'