当重写python add , mul 等魔术方法时,创建类的新实例然后返回该实例似乎是正常的。例如:
class test_class_simple:
def __init__(self, x):
self.x = x
def __add__(self, other):
return test_class(self.x + other.x)
但是,另一种选择是让 add 方法复制现有实例,然后仅更改其值:
import copy
def __add__(self, other):
new = copy.deepcopy(self)
new.x = self.x + other.x
return new
当处理具有大量变量的复杂类时,对它们进行深度复制(如示例2所示)然后更改magic方法影响的特定属性似乎更容易,也可能更安全。但是,我没有看到很多这样做的人的例子,所以我想知道它在我不知道的那条线是否存在某些缺点。这种方法有什么危害吗?
谢谢!
答案 0 :(得分:0)
我会采用您覆盖__add__
的第一种方法。原因如下:
copy.deepcopy()
是用Python而不是C编写的,因此这样做可能不会获得任何性能提升copy.deepcopy()
不像实例化一个新对象那样清晰,因为__add__
返回的对象与当前对象没有任何直接关系copy.deepcopy()
可能会卡住,因为它使用递归进行深层复制。