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