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

标签 python properties

基类有这个:

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/

相关文章:

python - 如何随时间创建重复的数据框并将其映射到时间列表?

c++ - 读取 'Extended' 文件属性 (C++)

python - Tensorflow-gpu获取卷积算法失败

python - 游戏设计 - 处理奖金/鸭子类型(duck typing) - python

java - Autowiring @ConfigurationProperties POJO 时出现 NullPointerException

java - 访问jar依赖的getResourceAsStream()

Java:在 war 中访问属性文件

JavaFX:公开 ObjectProperty 成员而不是 getter/setter?

python - mysql-python-replicator binlog 特定模式的启动位置

python - Pandas: reshape 数据框