Python 私有屬性和私有方法應用場景分析

2022-10-04 14:09:17 字數 3206 閱讀 4756

類的私有屬性和方法

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...