Python 向现有对象实例添加属性

Python 向现有对象实例添加属性,python,Python,我想创建一个具有特定属性的对象。我想动态添加它们。类似于,但随后使用属性而不是方法。下面是一个简单的例子 我喜欢动态创建: 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.sett

我想创建一个具有特定属性的对象。我想动态添加它们。类似于,但随后使用属性而不是方法。下面是一个简单的例子

我喜欢动态创建:

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
要使用方法实现这一点,我将执行以下操作:

class B():
    def __init__(self):
        for i in range(70,80):
            self.__dict__[chr(i)] = types.MethodType(lambda self,x: x*i, self)
对于我尝试过的属性:

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)
我还找到了
类型.DynamicClassAttribute
,但我不确定这是否有用

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

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

编辑:看起来是同一个问题

给了答案一个提示

follow函数(灵感来源于)将属性添加到类的单个实例中。它通过动态创建一个新类来实现

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
示例和测试:

def getter(self): print('Get!')
def setter(self, value): print('Set to {!r}!'.format(value))
def deleter(self): print('Delete!')
prop = property(getter, fset=setter, fdel=deleter)

class Foo: pass
foo = Foo()
foo2 = Foo()
attach_dyn_propr(foo, 'p', prop)

foo.p
foo2.p

... Get
... AttributeError: 'Foo' object has no attribute 'p'
可能有用