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

如何将一个对象的所有公共属性复制到Python中的另一个对象?,python,Python,我可以根据需要将一个对象的属性复制到另一个对象。但是在某些情况下,我只想复制公共属性而忽略私有属性或过滤掉一些特定的类,我应该怎么做才能实现它呢?所描述的需求是对复制属性的定义谓词。这可以通过过滤键来实现,假设您想省略\uuu*属性: class MyClass(object): def __init__(self): super(MyClass, self).__init__() self.foo = 1 self.__bar = 2

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

所描述的需求是对复制属性的定义谓词。这可以通过过滤键来实现,假设您想省略
\uuu*
属性:

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

所描述的需求是复制属性上定义的谓词。这可以通过过滤键来实现,假设您想省略
\uuu*
属性:

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