類的私有屬性和方法
python是個開放的語言,預設情況下所有的屬性和方法都是公開的 或者叫公有方法,不像c++和 j**a中有明確的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'
下面在看下python中私有屬性和受保護的屬性的例項**
具體**如下所示:
class people:
def __init__(self, name, age):
self.name = name
self.age = age
self._protect_var = 10 # 受保護的成員,使用乙個下劃線_,它僅僅是提示成員受保護,但可以被更改
self.__private_var = 10 # 使用雙下劃線__可以定義私有屬性
def sayhi(self):
print("hi, my name is {}, and i'm {}".format(self.name, self.age))
def get_var(self):
print(self.__private_var)
def set_var(self, var):
self.__private_var = var
# class instance 類的例項化
someone = people(name='jack', age=20) # 類的例項化
print(someone._protect_var) # 10 受保護的成員可以被列印
someone._protect_var = 20 # 受保護的成員可以被修改
print(someone._protect_var) # 20 可以被修改
# print(someone.__private_var) # 報錯 attributeerror: 'people' object has no attribute '__private_var'
someone.__private_var = 30 # 此處可以被修改,不會報錯(此處表示私有屬性可以被修改,具體原因可以百度)
print(someone.__private_var) # 可以列印,不會報錯
someone.get_var() # 10 此處可以發現,__private_var在上面被改成30,但此處列印出來卻是10(具體原因可以百度)
someone.set_var(40)
someone.get_var() # 40 這裡通過someone.set_var(40)改成了40
print程式設計客棧(dir(someone)) # dir()列印出someone這個物件支援的屬性和方法
# ['_people__private_var', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattri程式設計客棧bute__', 程式設計客棧'__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__private_var', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_protect_var', 'age', 'get_var', 'name', 'sayhi', 'set_var']
# 在類的內部重新命名了 __private_var重新命名成_people__private_var
someone._people__private_var = 100
someone.get_var() # 100 通過_people__private_var把__private_var的值改成了100
總結
python 私有屬性和私有方法
關於私有屬性和私有方法,1.兩個下劃線開頭的屬性是私有的 private 其他為公共的 public 2.類內部可以訪問私有屬性 方法 3.類外部不能直接訪問私有屬性 方法 4.類外部可以通過 類名 私有屬性 方法 名 訪問私有屬性 方法 私有屬性和私有方法在類中可以呼叫 在外部訪問時用 類名 物件...
Python私有屬性和私有方法
應用場景 在實際開發中,物件 的 某些屬性或方法 可能只希望 在物件的內部被使用,而 不希望在外部被訪問到 私有屬性 就是 物件 不希望公開的 屬性 私有方法 就是 物件 不希望公開的 方法 定義方式 在 定義屬性或方法時,在 屬性名或者方法名前 增加 兩個下劃線,定義的就是 私有 屬性或方法 不要...
Python 私有屬性和私有方法
僅用學習參考 應用場景定義方式 class deadfatboy def secret self print 這是乙個不能說的秘密 def printmysecret self self.secret if name main libai deadfatboy 李白 75 libai.printmy...