将现有对象添加到实例

2024-06-25 06:11:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个具有特定属性的对象。我想动态地添加它们。与Adding a Method to an Existing Object Instance类似,但使用属性而不是方法。下面是一个简单的例子。在

我喜欢动态创建:

class A():
    @property
    def a(self):
        return self._a
    @a.setter
    def a(self, x):
        self._a = 10*x

    @property
    def b(self):
        return self._b
    @b.setter
    def b(self, x):
        self._b = 10*x

要用方法做到这一点,我要做的是:

^{pr2}$

对于我尝试的属性:

class B():
    def __init__(self):
        for i in range(70,80):
            def tmp(self, x):
                self._x = i*x
            self.__dict__[chr(i)] = property(fget=lambda self: self._i, fset=tmp)

我还找到了types.DynamicClassAttribute,但我不确定这是否有用。在

这里提出了一个相关的问题,关于向类添加属性(在python 2中): Dynamically adding @property in python。我不知道如何将其扩展到类的实例。在

背景

我想为lantz项目编写一个“驱动程序”,通过PyPylon包装器使用相机。相机有一些事先不知道的属性。我想将所有属性添加为Feats(一些由lantz提供的decorator,它看起来类似于一个属性:它有一个getter和一个setter)。在

编辑:看起来How to add property to a class dynamically?是同一个问题


Tags: to对象方法inselfreturn属性def
1条回答
网友
1楼 · 发布于 2024-06-25 06:11:10

This comment给出了答案的提示。在

follow函数(灵感来自1)向类的单个实例添加属性。它通过动态创建一个新类来实现。在

def attach_dyn_propr(instance, prop_name, propr):
    """Attach property proper to instance with name prop_name.

    Reference: 
      * https://stackoverflow.com/a/1355444/509706
      * https://stackoverflow.com/questions/48448074
    """
    class_name = instance.__class__.__name__ + 'Child'
    child_class = type(class_name, (instance.__class__,), {prop_name: propr})

    instance.__class__ = child_class

示例和测试:

^{pr2}$

相关问题 更多 >