假设我们有这个属性:
import time class Test: @property def dt(self): return time.time() t = Test() print(t.dt) # 1590402868.9415174
在这个类的某些实例中,我想重写这个 property
property
t.dt = 1234
不起作用: AttributeError: can't set attribute
AttributeError: can't set attribute
我也试过用二传手:
@dt.setter def dt(self, value): self.dt = value
但是: RecursionError: maximum recursion depth exceeded
RecursionError: maximum recursion depth exceeded
所有物 对于对象实例,是否将其替换为普通变量/属性?
所有物
如果我理解正确,类似这样的东西可以帮助您:
class Test: def __init__(self): self._dt = None @property def dt(self): return self._dt if self._dt is not None else time.time() @dt.setter def dt(self, value): self._dt = value @dt.deleter def dt(self): self._dt = None t = Test() print(t.dt) #1590405187.1155756 t.dt = 1234 print(t.dt) #1234
或者,您可以从类本身中删除该属性:
t = Test() delattr(t.__class__, 'dt') t.dt = 1234 print(t.dt) #1234
在这种情况下,您不能更改原始代码。