[英]Yielding a dictionary containing an object's attributes in Python
我目前正在尝试编写一段代码,将给定类实例的所有属性转储到字典中,以便我可以更改它们而无需更改源对象。 有没有执行此操作的方法,或者是我可以复制和访问的内置词典?
我真正在做的是制作一个特殊的类,该类从各种其他类的实例中复制实际属性(及其对应的值)。 基本上,它将模仿任何类的任何实例。
例如,对象x分别具有属性x.name和x.number,“ Joe”和7。 我希望我的新对象模仿对象y复制属性,以便y现在具有属性y.name和y.number,“ Joe”和7。
谢谢!
编辑: 发布此消息后不久,我发现了我要找的东西!
这就是我所需要知道的。
为什么不在您的“模仿”对象上编写__getattr__()
(或__getattribute__()
)方法,该方法仅在请求属性时才执行此操作,而不是复制属性? 除其他好处外,这将使属性保留为可执行代码(而不是复制其返回值),并且即使在创建模拟对象之后将新属性添加到模拟对象中也可以使用。 (此外,我将其称为包装器或代理对象,而不是模拟对象。)类似:
class Wrapper(object):
def __init__(self, obj):
self.__wrapped__ = obj
def __getattr__(self, key):
return getattr(self.__wrapped__, key)
l = [3, 2, 1]
w = Wrapper(l)
print w.index(2) # calls through to l.index()
Very对象具有__dict__
属性,该属性将名称(变量)映射到它们绑定的值。 搞砸了。
>>> class MyObj(object):
... def __init__(self, x, y):
... self.x = x
... self.y = y
...
>>> foo = MyObj('Joe', 7)
>>> foo.x
'Joe'
>>> foo.y
7
>>> foo.__dict__
{'y': 7, 'x': 'Joe'}
>>> class Mimic(object):
... def __init__(self, obj):
... self.__dict__.update(obj.__dict__)
...
>>> m = Mimic(foo)
>>> m.x
'Joe'
>>> m.y
7
>>> print m.__dict__
{'y': 7, 'x': 'Joe'}
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.