我目前正在尝试编写一段代码,将给定类实例的所有属性转储到字典中,以便我可以在不更改源对象的情况下更改它们。有没有这样做的方法,或者我可以复制和访问的内置字典?
我真正在做的是创建一个特殊的类,它从不同的其他类的实例中复制实际的属性(及其相应的值)。基本上它会模仿任何类的任何实例。
例如,对象x分别具有x.name和x.number,“Joe”和7的属性。我希望我的新对象模仿,对象y,复制属性,使y现在具有属性y.name和y.number,“Joe”和7。
谢谢!
编辑: 发布此内容后,我发现了我想要的内容!
Python dictionary from an object's fields
这几乎是我需要知道的全部内容。
答案 0 :(得分:2)
为什么不在“模仿”对象上编写__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()
答案 1 :(得分:1)
Very object有一个__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'}
>>>