想象兩個相似的類。第一個有屬性和吸氣劑,第二個只有屬性。如果我們不明確地撰寫 getter,那么屬性已經在做 getter 作業了。那么為什么我們需要定義getter呢?
class Test:
def __init__(self):
self._prop = 0
@property
def prop(self):
print("property accessed")
return self._prop
@prop.getter
def prop(self):
print("getter accessed")
return self._prop
class Test2:
def __init__(self):
self._prop = 0
@property
def prop(self):
print("property accessed")
return self._prop
if __name__ == "__main__":
t = Test()
print(t.prop)
et = Test2()
print(et.prop)
# output
# getter accessed
# 0
# property accessed
# 0
uj5u.com熱心網友回復:
該類property提供了兩種配置 getter、setter 和 deleter 方法的方法。
- 創建屬性時將函式作為引數傳遞。
- 使用屬性的
getter、setter和deleter方法,每個方法都回傳一個帶有相應、或覆寫的新屬性。fgetfsetfdel
例如,給定三個函式
def get_value(self):
...
def set_value(self, value):
...
def delete_value(self):
...
你寫要么
p1 = property(get_value, set_value, delete_value)
或者
# All arguments are optional
p2 = property()
p2 = p2.getter(get_value)
p2 = p2.setter(set_value)
p2 = p2.deleter(set_value)
property, property.getter,property.setter和property.deleter都被設計成允許它們用作裝飾器。
p2 = property()
@p2.getter
def p2(self): # get_value
...
@p2.setter
def p2(self, value): # set_value
...
@p2.deleter
def p2(self): # del_value
...
在通常的使用中,采用混合方法:在一個步驟中使用 getter 創建和初始化屬性(第一個引數是支持只讀屬性的最常見用例的 getter),可選的 setter 和 deleter必要時提供。
@property
def p2(self): # get_value
...
因此,顯式使用的property.getter很少,但可用。雖然可以隨時呼叫所有三種方法來更改現有屬性的行為,但我認為我什至沒有看到它們用于屬性的初始配置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/414271.html
標籤:
下一篇:定義從函式繼承的S4類
