【发布时间】:2017-07-12 07:57:11
【问题描述】:
在类中实现copy 方法的最佳做法是什么?
这是我的课的一个例子:
class MyClass:
def __init__(self, foo, bar=None):
self.foo = foo
if bar is not None:
self.bar = bar
else:
self.bar = {'Hello': 'Ciao'}
我发现五年前的一篇帖子建议如下:
import copy
def copy(self):
return MyClass(copy.copy(self.foo), copy.copy(self.bar))
它仍然是唯一的方法还是有其他可能性?
我需要创建对象的副本以避免函数更改原始对象。函数是这样的:
def translate_and_print(my_class, dict={'Hello':'Ciao'}):
temp = my_class # here I want to use the copy method: temp = my_class.copy()
temp.foo = temp.bar[temp.foo]
print(temp.foo)
以下代码的输出是“Ciao”、“Ciao”,但应该是“Ciao”、“Hello”
mc = MyClass('Hello')
translate_and_print(mc)
print(mc.foo)
如果我使用copy() 方法,我会遇到错误:
AttributeError: 'MyClass' 对象没有属性 'copy'
【问题讨论】:
-
关于你更新的评论,我可以运行
myobject = MyClass('foo'),然后运行copy.copy(myobject),没有任何问题。你能提供一段代码来重现你的错误吗? -
出于历史原因保留上述评论。看来您的错误是尝试调用
my_class.copy(),而您应该调用copy.copy(my_class)。 -
我的帖子已经包含了,特别是最后“你可以直接拨打
copy.copy(myobject)”。