Python:将两个独立的对象融合为一个?

时间:2012-03-06 20:35:50

标签: python python-2.7

这里有一个奇怪的问题。如果我有两个独立的对象,每个对象都有自己的变量和函数,那么这两个对象是否可以组合成一个对象?

更具体一点:我有一个包含15个变量的对象,然后我有了自己的对象。我想将这些变量加载到self中。有没有简单的方法可以做到这一点,还是我必须手动完成?

5 个答案:

答案 0 :(得分:4)

使用__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))

答案 1 :(得分:2)

vars(obj)返回obj.__dict__

所以

vars(self).update(vars(obj))也适用

答案 2 :(得分:1)

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

答案 3 :(得分:0)

立即从另一个对象复制成员的快速但丑陋(且不安全)的方式:

self.__dict__.update(otherobj.__dict__)

但这不会复制方法和静态(类)成员。

答案 4 :(得分:0)

for k,v in other.__dict__.items():
    # you might want to put other conditions here to check which attrs you want to copy and which you don't
    if k not in self.__dict__.keys():
        self.__dict__[k]=v