【问题标题】:Python add attribute of property to instance of class [duplicate]Python将属性的属性添加到类的实例[重复]
【发布时间】:2021-07-26 16:02:52
【问题描述】:

我正在尝试用属性重新定义对象的属性

class MyClass:
    asd = 'asd_string'

    @property
    def foo(self):
        return 1 if self.asd is not None else None


def execute(obj):
    print(obj.bar)


if __name__ == '__main__':
    obj = MyClass()
    obj.bar = 42
    execute(obj) # 42
    
    obj.bar = property(fget=lambda self: 1 if self.asd is not None else None)
    
    execute(obj) # <property object at 0x7fd058ef7400>

我想用类似于def foo 的东西重新定义bar 问题是,我无法编辑MyClass,并且无法更改execute 函数 另外,我不确定 lambda 是否可以与 self(MyClass 的实例)一起使用

是否可以在运行时使用选项修补对象?

【问题讨论】:

  • @Asocia 是的,这也很有用,之前没有找到这个帖子。谢谢!

标签: python


【解决方案1】:

您可以将新属性添加到MyClass,而不是添加到实例中

prop = property(fget=lambda self: 1 if self.asd is not None else None)
setattr(MyClass, 'bar', prop)
# or
MyClass.bar = prop

execute(obj) # 1

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 2011-11-24
    • 2012-05-18
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多