如何在Python中将对象的所有公共属性复制到另一个对象?

时间:2017-05-09 07:39:40

标签: python

我可以根据this question将对象的属性复制到另一个对象。但在某些情况下,我只是想复制公共属性并忽略私有属性或过滤掉一些特定的类,我该怎么做才能实现它?

1 个答案:

答案 0 :(得分:4)

描述的要求是对复制的属性的已定义谓词。这可以通过过滤密钥,假设您要省略__*属性:

class MyClass(object):
    def __init__(self):
        super(MyClass, self).__init__()
        self.foo = 1
        self.__bar = 2

def key_predicate(key):
    return not key.startswith('_')

obj = MyClass()
d = {k: v for k, v in obj.__dict__.items() if key_predicate(k)}

这将导致:

{'foo': 1}

这可以应用于新实例:

class MyOtherClass(object):
    pass

other_obj = MyOtherClass()
other_obj.__dict__.update(d)
assert other_obj.foo == 1