好吧...这可能是一个愚蠢的问题...但我现在找不到答案!
我需要实现一个对象的复制,我想要复制该对象的所有属性,除了我想要完全控制复制的一两个属性。
这是对象的标准复制行为:
>>> class test(object):
... def __init__(self, arg):
... self._a = arg
...
>>> t = test(123999)
>>> t._a
123999
>>> tc = copy.copy(t)
>>> tc._a
123999
这基本上意味着所有属性都被复制。我想做的是通过以下方式重新使用此行为:
>>> class test(object):
... def __init__(self, arga, argb):
... self._a = arga
... self._b = argb
...
... def __copy__(self):
... obj_copy = copy.copy(self) #NOT POSSIBLE OF COURSE => infinite recursion
... obj_copy._b = my_operation(obj_copy._b)
... return obj_copy
我希望您明白了:我想重新使用对象复制行为,但挂钩我自己的操作。有没有一种干净的方法来做到这一点(无需这样做for attr_name in dir(self): ...
) ???
你可以这样做:
def __copy__(self):
clone = copy.deepcopy(self)
clone._b = some_op(clone._b)
return clone
这会起作用,因为deepcopy
避免递归。来自蟒蛇文档 http://docs.python.org/library/copy.html?highlight=deepcopy#copy.deepcopy:
deepcopy() 函数通过以下方式避免了这些问题:
保存当前复制过程中已复制对象的“备忘录”字典;和
让用户定义的类覆盖复制操作或复制的组件集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)