Python特性 屬性以及私有化

2021-08-11 01:47:53 字數 2531 閱讀 8325

·特性是物件內部的變數

·物件的狀態由它的特性來描述,物件的方法可以改變它的特性

·可以直接從物件外部訪問特性

#定義

class

person:

name = 'yoda'

# 類中特性

defget_name

(self):

# 通過訪問器方法訪問特性

return self.name

defset_name

(self, value):

# 通過訪問器方法改變特性

self.name = value

#執行:

a1 = person()

a1.name # 直接從外部訪問特性

yoda

a1.name = 'master'

# 直接從外部改變特性

預設情況下,python支援從外部對特性進行操作,但它破壞了類的封裝原則,要從外部物件無法訪問,應該使用私有特性。

為了讓外部無法訪問特性或方法,只要在名字前面加上雙下劃線即可。

#定義

class

secret:

__name = 'yoda'

# 加上雙下劃線私有化特性

defget_name

(self):

return self.__name

def__secret

(self):

# 私有化方法

print

"can't find"

defaccess

(self):

return self.__secret() # 訪問器訪問私有方法

#執行

a2 = secret()

a2.__name # 訪問不到特性!

a2._secret__name # 還是可以從外部訪問特性

yoda

python本質上並不完全支援私有化,只不過是將名字進行改變了

·有一些物件導向語言支援私有特性,這些特性無法從外部直接訪問,要編寫getter和setter方法對這些特性進行操作

·python不需要getter和setter方法,因為python中所有特性都是公開的,如果不放心使用直接訪問物件的特性,可以為物件便攜setter和getter方法,但是跟好的解決辦法是使用屬性(property)

·python隱藏訪問器地方法,讓所有特性看起來一樣,這種通過訪問其定義的特性被稱為屬性

# 第一種方法使用屬性

class

foo:

def__init__

(self):

self.name = 'yoda'

self.work = 'master'

defget_person

(self):

return self.name,self.work

defset_person

(self,value):

self.name,self.work = value

person = property(get_person,set_person)

執行如下:

a3 = foo()

a3.person

('yoda', 'master')

a3.person = 'skylaer','programer'

a3.person

('skylaer','programer')

# 第二種方法使用屬性

class

foo:

def__init__

(self):

self.name = 'yoda'

self.work = 'master'

@property

defperson

(self):

return self.name,self.work

@person.setter # 如果不指定stter屬性,那麼無法從類的外部對它的值進行設定,這對於唯讀特性非常有用

defperson

(self,value):

self.name,self.work = value

·property()第乙個引數是getter方法,第二個引數是setter方法

·property函式可以用0,1,2,3或者4個引數來呼叫,如果沒有引數,產生的屬性既不可讀也不可寫,這四個引數分別叫做fget、fset、fdel、fdoc,如果想要乙個屬性是只寫的,並且有乙個文件字串,能使用它們作為關鍵字引數。

python 私有化屬性

python 沒有和其他程式語言一樣的定義共有屬性和私有屬性的關鍵字,實現屬性私有化和屬性保護,都是使用 格式進行的偽效果。私有化使用場景 保護屬性 比如銀行存款等,存款直接外放非常危險,就可以私有化,然後通過類提供的方法增加刪減鉛筆的金額,對存款進行保護。內部過濾 過濾一下不符合屬性的資料,資料不...

python私有化方法 Python 私有化

python中的私有變數和私有方法仍然是可以訪問的 訪問方法如下 私有變數 例項.類名 變數名 私有方法 例項.類名 方法名 python並沒有真正的私有化支援,但可用下劃線得到偽私有。盡量避免定義以下劃線開頭的變數 1 單下劃線 開始的成員變數叫做保護變數,意思是只有類例項和子類例項能訪問到這些變...

Python中屬性的私有化

1.引入 在python物件導向程式設計過程中,修改類屬性都是直接通過類名修改的,如果有些重要的屬性不希望他人任意修改怎麼辦呢?這就要用到屬性私有化功能。2.概念 保護屬性安全,使其不能隨意修改,將屬性定義為私有屬性,新增乙個可呼叫的方法去使用。3.語法 兩個下劃線開頭,宣告該屬性為私有,不能在類的...