擅长:python、mysql、java
<p>任何时候你实现一个特殊的方法(比如<code>__getattr__</code>,<code>__deepcopy__</code>,<code>__str__</code>,等等),你要么需要使用super,要么使用原始方法的某个子集。在</p>
<p>我不太清楚你是如何记忆属性的,但我会简化你的例子。假设您总是使用相同的a(并且它是不可变的,不需要被复制),但是否则,您想要复制b(并且您可以直接将<code>a</code>和{<cd5>}传递给构造函数来生成一个新对象。在</p>
<pre><code>class CustomDeepcopy(object):
def __init__(self, a=None, b=None):
if a:
self.a = a
if b:
self.b = b
a = SomeSimpleObject()
b = SomeBigObject()
@property
def dont_deepcopy(self):
return ['b']
@property
def deepcopy_attributes(self):
return ['a']
def __deepcopy__(self,memo):
new_kwargs = dict((k, getattr(self, attr, None)) for attr in self.dont_deepcopy)
for attr in self.deepcopy_attributes:
new_kwargs[attr] = copy.deepcopy(getattr(self, attr, None))
return self.__class__(**new_kwargs)
</code></pre>