目錄
通rujnlcdyh常,當我們需要對物件的敏感屬性或者不希望外部直接訪問的屬性進行私有化,但是某些時候我們又需要對這些私有屬性進行修改,該怎麼處理呢?
定義乙個類:
class student(object):
_***='male'
__age=0
執行:(私有屬性無法在外部訪問)
>>> stu = student()
>>> stu._***
'male'
>>> stu.__age
traceback (most recent call last):
file "", line 1, in
attributeerror: 'student' object has no attribute '__age'
>>>
從上面的類中我們可以看到,私有屬性無法在類例項中訪問,怎麼辦呢?當我們需要對類的私有屬性__age進行查詢和修改的時候,我們可以定義get_age和set_age去實現。
class student(object):
_***='male'
__age=0
def get_age(self):
return self.__age
def set_age(self,age):
self.__age = age
執行:>>> stu = student()
>>> stu.get_age()
0>>> stu.set_age(18)
>>> stu.get_age()
18>>>
但是上面的這種方式略顯複雜,如果在私有屬性較多的類中就不太適用了,所以我們期望尋求一種更簡單的方式去解決這個問題,比如將這個私有屬性轉化為另乙個屬性。告訴你個好訊息,python已經幫我們實現了,這就是@property。
class student(object):
程式設計客棧 _***='male'
__age=0
def get_age(self):
return self.__age
def set_age(self,age):
self.__age = age
@property
def age(self):
return self.__age
執行:>>> from payhlib import student
>>> s = student()
>>> s.age
0>>> s.set_age(19)
>>> s.age
19>>
在上面我們將__age私有屬性轉換為了age屬性,你可能會想,既然私有屬性轉換為了屬性,那我們是不是可以直接修改它呢?答案是不行,因為property雖然將__age轉換為了屬性,但是其不具備setter功能,需要我們去新增。
>>> from payhlib import student
>>> s = student()
>>> s.age
0>>> s.age=20
traceback (most recent call last):
file "", line 1, in
attributeerror: can't set attribute
>>>
新增setter方法
class student(object):
_swww.cppcns.comex='male'
__age=0
def get_age(self):
return self.__age
def set_age(self,age):
self.__age = age
@property
def age(self):
程式設計客棧 return self.__age
@age.setter
def age(self,value):
self.__age=value
執行:>>> from payhlib import student
>www.cppcns.com>> s = student()
>>> s.age
0>>> s.age=20
>>> s.age
20>>>
python中的 property使用
如下 class animal object def init self,name,age self.name name self.age age a animal zhuzhu 9 a.name out 3 zhuzhu a.age out 4 9 a.age 20 a.age out 5 20在...
python 中 property的使用
從14年下半年開始接觸到python,自學了一段時間,後又跟別人學習了下,把基礎知識基本上學過了。忽然感覺python不可能這麼簡單吧,就這麼點東西?後來看了下書,發現還有很多的高階部分。連續看了兩天,把裝飾符 看了下,記錄下。裝飾符的作用就是類裡的方法變成屬性使用,比直接呼叫方法要直接簡單 直接上...
Python之property的使用
1.私有屬性新增getter和setter方法 class money object def init self self.money 100 def setmoney self,value if isinstance value,int self.money value else print er...