繁体   English   中英

如何使用 Python 在运行时创建属性?

[英]How to create properties at runtime with Python?

所以我试图弄清楚我想做的事情是否可能。 我正在为应用程序编写一些测试代码,并且我的对象包含代表我们产品界面中的一些元素的属性。 我想要做的是能够将应用程序运行器和数据 object 传递给新的 class 并让它根据数据 ZA8CFDE6331BD59EB2AC96F8911C4B66 中的属性子集动态生成一组访问器属性到目前为止我的想法:

  1. 创建一个属性的子类,其中包含从接口中提取额外信息所需的元数据
  2. 重构现有数据对象以使用 UI 中相关字段的新属性子类
  3. 创建一个新的生成器 class 接受 UI 驱动程序 object 和数据 object
    • 反映数据 object 以获取其中属于新属性子类类型的所有成员的列表
    • 根据属性子类中的元数据将来自 UI 的信息存储到生成器 class 实例的成员(计划使用setattr
    • 在运行时创建属性以使 (b) 中创建的成员只读并提供与现有代码一致的接口(即使用.[name]而不是.[name]()

我想除了步骤 3c 之外,我已经弄清楚了一切。 有没有办法在运行时动态创建属性? 任何帮助将不胜感激。

不确定那是你想要的。 但是您可以使用getattrsetattr方法定义动态只读属性。 这是一个例子:

class X(object):
    data = {'x' : 123, 'y' : 456}
    def __getattr__(self, name):
        if name in self.data:
            return self.data[name]
        raise AttributeError(name)

    def __setattr__(self, name, value):
        if name in self.data:
            return None
        return super(X, self).__setattr__(name, value)

a = X()
print a.x, a.y
a.x = 0
print a.x

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM