2024-04-24 22:50:50 发布
网友
有点奇怪的问题。如果我有两个独立的对象,每个对象都有自己的变量和函数,有没有办法把这两个对象组合成一个单独的对象?在
更具体地说:我有一个对象,其中有15个变量,然后我有我的self对象。我想把这些变量加载到self中。有什么简单的方法可以做到这一点还是我必须手动完成?在
使用__dict__属性:self.__dict__.update(other.__dict__)
__dict__
self.__dict__.update(other.__dict__)
在某些情况下,这是行不通的,尤其是在类中定义的任何变量,而不是在方法(或其他“正在运行的代码”中)中定义的变量。在
如果你想复制几乎所有的东西:
for k in filter(lambda k: not k.startswith('_'), dir(other)): # avoid copying private items setattr(self, k, getattr(other, k))
vars(obj)返回obj.__dict__
vars(obj)
obj.__dict__
所以
vars(self).update(vars(obj))也可以
vars(self).update(vars(obj))
你可以创建一个像代理一样工作的对象-只需调用对象的方法和变量。在python中,您可以使用__getattr__()来实现这一点:
__getattr__()
class A: def __init__(self): self.a1 = 1 self.a2 = 2 def a(self): return "a" class B: def __init__(self): self.b1 = 1 self.b2 = 2 def b(self): return "b" class Combine: def __init__(self, *args): self.__objects = args def __getattr__(self, name): for obj in self.__objects: try: return getattr(obj, name) except AttributeError: pass raise AttributeError obj = Combine(A(), B()) print obj.a1, obj.a2, obj.a() print obj.b1, obj.b2, obj.b()
使用
__dict__
属性:self.__dict__.update(other.__dict__)
在某些情况下,这是行不通的,尤其是在类中定义的任何变量,而不是在方法(或其他“正在运行的代码”中)中定义的变量。在
如果你想复制几乎所有的东西:
vars(obj)
返回obj.__dict__
所以
vars(self).update(vars(obj))
也可以你可以创建一个像代理一样工作的对象-只需调用对象的方法和变量。在python中,您可以使用
__getattr__()
来实现这一点:相关问题 更多 >
编程相关推荐