python 私有化屬性

2021-09-23 22:37:47 字數 2076 閱讀 5103

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.語法 兩個下劃線開頭,宣告該屬性為私有,不能在類的...