基类有:
def _management_form(self):
# code here
return form
management_form = property(_management_form)
在我的派生类中,我正在尝试写这个:
self.management_form = self.myfunc()
但当然它不起作用。它告诉我“无法设置属性”,因为该属性没有setter。但我不想设置它,我想重新定义“managent_form”的含义。我尝试先放del self.managent_form
,但这也不起作用。那我该怎么做呢?
答案 0 :(得分:6)
您可以分配给班级,而不是实例:
MyClass.management_form = property(self.myfunc)
当然,这会改变所有实例(甚至是先前存在的实例)的类本身。如果这没关系,你也可以调用它一次,而不是每个派生类构造函数(我猜你现在正在做的事情)。
否则,您可以通常的方式在派生类中覆盖它:
class MyOtherClass(MyClass):
def _new_mf(self):
# Better code
return form
management_form = property(new_mf)
答案 1 :(得分:1)
您可以使用通过描述符实现的类似Id C1 C2 C3
123 Office +65 55667788
的方法,如下所示:Replace property for perfomance gain
(与标准CachedAttribute
不同,此类描述符可以由实例属性直接覆盖-在新样式类和PY3中也是如此。)