Python:将两个不同的对象融合成一个?

2024-04-24 22:50:50 发布

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

有点奇怪的问题。如果我有两个独立的对象,每个对象都有自己的变量和函数,有没有办法把这两个对象组合成一个单独的对象?在

更具体地说:我有一个对象,其中有15个变量,然后我有我的self对象。我想把这些变量加载到self中。有什么简单的方法可以做到这一点还是我必须手动完成?在


Tags: 对象方法函数self手动办法
3条回答

使用__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(self).update(vars(obj))也可以

你可以创建一个像代理一样工作的对象-只需调用对象的方法和变量。在python中,您可以使用__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()

相关问题 更多 >