0
オブジェクトのプロパティをthis questionに従って別のオブジェクトにコピーできます。しかし、場合によっては、公共のプロパティをコピーしてプライベートプロパティを無視したり、特定のクラスを除外したいだけの場合は、それを実現するために何をする必要がありますか?オブジェクトのすべてのパブリックプロパティをPythonの別のオブジェクトにコピーする方法は?
オブジェクトのプロパティをthis questionに従って別のオブジェクトにコピーできます。しかし、場合によっては、公共のプロパティをコピーしてプライベートプロパティを無視したり、特定のクラスを除外したいだけの場合は、それを実現するために何をする必要がありますか?オブジェクトのすべてのパブリックプロパティをPythonの別のオブジェクトにコピーする方法は?
上記の要件は、コピーされた属性に対する定義済みの述語です。これは、あなたが__*
属性を省略したいと仮定すると、キーの上にフィルタリングすることで使用できます
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
できます。どうもありがとう! – natsuapo