在类中实现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"。
以下代码的输出为 "Ciao"、"Ciao",但正确输出应为 "Ciao"、"Hello"。
mc = MyClass('Hello')
translate_and_print(mc)
print(mc.foo)
如果我使用copy()
方法,会出现错误:
AttributeError: 'MyClass'对象没有属性'copy'
myobject = MyClass('foo')
,然后执行copy.copy(myobject)
而没有任何问题。您能否提供一个能够重现您错误的代码片段? - Jonas Adlermy_class.copy()
,而你应该调用copy.copy(my_class)
。 - Jonas Adlercopy.copy(myobject)
。 - Jonas Adler