2017-05-09 7 views
0

オブジェクトのプロパティをthis questionに従って別のオブジェクトにコピーできます。しかし、場合によっては、公共のプロパティをコピーしてプライベートプロパティを無視したり、特定のクラスを除外したいだけの場合は、それを実現するために何をする必要がありますか?オブジェクトのすべてのパブリックプロパティをPythonの別のオブジェクトにコピーする方法は?

答えて

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 
+0

できます。どうもありがとう! – natsuapo

関連する問題