基类有这个:
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
放在第一位,但这也不起作用。那么如何取消属性化呢?
最佳答案
您可以分配给类,而不是实例:
MyClass.management_form = property(self.myfunc)
当然,这会更改所有实例(甚至是先前存在的实例)的类本身。如果这没问题,您也可以只调用一次,而不是在每个派生类构造函数中调用(我猜您现在正在做的事情)。
否则,您可以按照通常的方式在派生类中覆盖它:
class MyOtherClass(MyClass):
def _new_mf(self):
# Better code
return form
management_form = property(new_mf)
关于Python:如何用常规属性替换属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963036/