有沒有一種方法可以在Python中重寫運行時的@property getter?在運行時覆蓋@property getter
我希望我的類有一個'複雜'getter,它運行一些代碼並返回一個可以更改的值。但是,如果由於某種原因我將該變量設置爲其他值,我希望它始終返回該值。
例如:
class Random(object):
@property
def random_number():
return random.randint(0,10)
@random_number.setter
def random_number(value):
# Overlord says that random must always return `value`
(((I don't know that to do here)))
>>>r = Random()
>>>r.random_number
>>>(returns something between 0,10)
>>>r.random_number = 4 # Confirmed by dice roll
>>>r.random_number
>>>4 (always)
我知道我可以將它與一個實例變種如「force_value」,我總是在我的getter檢查,但我想避免,如果可能的。
理想的情況下,我的setter函數可以做類似
self.random_number.getter = lambda:4
但我不知道如何使這項工作。
這很聰明。我只是不確定在這裏「聰明」是否是件好事。 – delnan
這正是我想要做的,所以我正在接受。但是,我同意其他人的觀點,我只會堅持簡單而不那麼麻煩的'_override'實例屬性。 –