Python:如何用常规属性替换属性?

mpe*_*pen 5 python properties

基类有这个:

def _management_form(self):
    # code here
    return form
management_form = property(_management_form)
Run Code Online (Sandbox Code Playgroud)

在我的派生类中,我正在尝试写这个:

self.management_form = self.myfunc()
Run Code Online (Sandbox Code Playgroud)

但当然它不起作用.它告诉我"无法设置属性",因为该属性没有setter.但我不想设置它,我想重新定义"managent_form"的含义.我尝试del self.managent_form先放,但这也不起作用.那我该如何解决它的问题呢?

Mar*_*tos 6

您可以分配给类,而不是实例:

MyClass.management_form = property(self.myfunc)
Run Code Online (Sandbox Code Playgroud)

当然,这会改变所有实例(甚至是先前存在的实例)的类本身.如果这没关系,你也可以调用它一次,而不是每个派生类构造函数(我猜你现在正在做的).

否则,您可以通常的方式在派生类中覆盖它:

class MyOtherClass(MyClass):
    def _new_mf(self):
        # Better code
        return form
    management_form = property(new_mf)
Run Code Online (Sandbox Code Playgroud)