寫在前面,python中proprety在python中大量使用,尤其是在一些框架和網路大牛寫的**中,非常常見,所有學習proprety就非常必要了,廢話不多說,直接上**:
# 定義例項方法的方法來使用
class
test
(object):
# 可以定義引數
def__init__
(self, name="liming"):
self.__age = 18
if name == "liming":
self.name = "liming"
else:
self.name = name
defgetage
(self):
print("獲取屬性的時候呼叫")
if self.name == 'likang':
return self.__age
else:
print("%s這個使用者不能訪問當前的這個屬性" % self.name)
defsetage
(self, value):
if self.name == 'lili':
self.__age = value
else:
print("無權進行修改")
defdelage
(self):
del self.__age
print("刪除屬性的時候呼叫")
age = property(getage, setage, delage)
if __name__ == '__main__':
test = test()
test.age = 20
輸出:
無權進行修改
第一種用法,定義例項方法,然後建立proprety的例項物件,注意:在定義三個方法的時候,set***,get***,del***中的」***」必須保持一致.proprety主要的是用來當乙個物件要操作比較敏感屬性的時候,可以對屬性進行保護和對資料進行篩選,以免出現不期待的結果發生.
class
test
(object):
def__init__
(self, name='liming'):
self.__age = 18
if name == 'liming':
self.name = 'liming'
else:
self.name = name
@property
defage
(self):
if self.name == "liming":
return self.__age
else:
print("%s無權訪問該屬性")
@age.setter
defage
(self, value):
if self.name == "lili":
self.__age = value
else:
print("無權修改該屬性")
@age.deleter
defage
(self):
del self.__age
test = test()
test.age = 20
輸出:
無權修改該屬性
總結:使用proprety方法,可以保證資料被正確的訪問和賦值,在訪問資料的時候,可以對使用者進行許可權相關的驗證等,從而保證了資料的穩定性.
最後,貼出proprety的部分原始碼:
property(fget=none, fset=none, fdel=none, doc=none) -> property attribute
fget is a function
to be used for getting an attribute value, and likewise
fset is a function
for setting, and fdel a function
for del'ing, an
attribute. typical use is
to define a managed attribute x:
class c(object):
def getx(self): return self._x
def setx(self, value): self._x = value
def delx(self): del self._x
x = property(getx, setx, delx, "i'm the 'x' property.")
decorators make defining new properties or modifying existing ones easy:
class c(object):
@property
def x(self):
"i am the 'x' property."
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
# (copied from class doc)
物件導向 proprety
為什麼要用property?將乙個類的函式定義成特性以後,物件再去使用的時候obj.name,根本無法察覺自己的name是執行了乙個函式然後計算出來的,這種特性的使用方式遵循了統一訪問的原則 class people def init self,name,weight,height self.nam...
python中 python中的 與
這一部分首先要理解python記憶體機制,python中萬物皆物件。對於不可變物件,改變了原來的值,其別名 變數名 繫結到了新值上面,id肯定會改變 對於可變物件,操作改變了值,id肯定會變,而 是本地操作,其值原地修改 對於 號操作,可變物件和不可變物件呼叫的都是 add 操作 對於 號操作,可變...
python中否定for 在python中否定函式
有沒有一種方法可以否定乙個函式,使它返回負數。在我的函式中,我有條件句,每個條件句都讓這個 烏龜 移動。有沒有一種方法可以否定這一點,所以烏龜的每乙個動作都是否定的。我說的是 狀況 在def ttinterpret program interpret program as a tinyturtle ...