python 沒有和其他程式語言一樣的定義共有屬性和私有屬性的關鍵字,實現屬性私有化和屬性保護,都是使用**格式進行的偽效果。
私有化使用場景:
保護屬性: 比如銀行存款等,存款直接外放非常危險,就可以私有化,然後通過類提供的方法增加刪減鉛筆的金額,對存款進行保護。
內部過濾:過濾一下不符合屬性的資料,資料不對,不進行操作,比如銀行存款,取出比銀行存款還多的錢,可以通過方法內部進行過濾,不用在外部進行對比。
補充: 命名規範
xx_是為了怕和系統關鍵字衝突所加的下劃線
變數前後雙下劃線是系統內建關鍵字,盡量避免這樣命名 如__xx__ 這樣
唯讀屬性
方法1 property裝飾器方法
class
bank
(object):
def__init__
(self)
: self.__moeny =
10000
defgetmoeny
(self)
:return self.__moeny
class
bank
(object):
def__init__
(self)
: self.__moeny =
10000
@property
defmoeny
(self)
:return self.__moeny
@moeny.setter
defmoney
(self,val)
: self.__money = val
@money.deleter
defmoney
(self)
:del self.__money
使用方法1之後:
還可以使用例項._類名__屬性 =值 還是可以修改的
例項.dict[『屬性』] = 值 也是可以修改的
使用方法2之後:
例項._類名__屬性 =值 還是不可以修改了
例項.dict[『屬性』] = 值 也是可以修改的
方法2 :setattr(self,key,value)
classa(
):def__init__
(self, ax, bx)
: self.a = ax
self.b = bx
deff(self)
:print
(self.__dict__)
def__getattr__
(self, name)
:print
("__getattr__"
, name)
def__setattr__
(self, name, value)
:print
("__setattr__"
, name, value)
#加入這一行就限制屬性為唯讀屬性,能新增,新增之後就不能更改
if name ==
'c'and name in self.__dict__.keys():
print
("此屬性為唯讀屬性,"
)else
: self.__dict__[name]
= value
a = a(1,
2)a.f(
)a.x
a.x =
3a.f(
)a.c =
10a.c =
20a.f(
)
結果
__setattr__ a 1
__setattr__ b 2
__getattr__ x
__setattr__ x 3
__setattr__ c 10
__setattr__ c 20
此屬性為唯讀屬性,
python私有化方法 Python 私有化
python中的私有變數和私有方法仍然是可以訪問的 訪問方法如下 私有變數 例項.類名 變數名 私有方法 例項.類名 方法名 python並沒有真正的私有化支援,但可用下劃線得到偽私有。盡量避免定義以下劃線開頭的變數 1 單下劃線 開始的成員變數叫做保護變數,意思是只有類例項和子類例項能訪問到這些變...
Python特性 屬性以及私有化
特性是物件內部的變數 物件的狀態由它的特性來描述,物件的方法可以改變它的特性 可以直接從物件外部訪問特性 定義 class person name yoda 類中特性 defget name self 通過訪問器方法訪問特性 return self.name defset name self,val...
Python中屬性的私有化
1.引入 在python物件導向程式設計過程中,修改類屬性都是直接通過類名修改的,如果有些重要的屬性不希望他人任意修改怎麼辦呢?這就要用到屬性私有化功能。2.概念 保護屬性安全,使其不能隨意修改,將屬性定義為私有屬性,新增乙個可呼叫的方法去使用。3.語法 兩個下劃線開頭,宣告該屬性為私有,不能在類的...