这是我真正得到的。我正在尝试使用__repr__
从其输出中创建一个新对象。
我有一个类OrderedSet,它包含一个列表和组织它的方法。 此类的 str 方法是
def __str__(self):
s = "Set contains: "
for elem in self.list: s += (" '" + elem + "'")
return s
现在我应该以某种方式使用__repr__
来实现一个新对象。
与Orderedset second = repr(first)
我可以这样做吗?
def __repr__(self):
return self.list.__str__()
答案 0 :(得分:1)
“使用__repr__
创建新对象”背后的想法是__repr__
can be valid python code的输出,当用eval
解释时,创建(副本) )原始对象。例如,repr("foo")
返回"foo"
(包括"
)或repr([1,2,3])
返回[1,2,3]
。
在你的例子中,你可能需要这样的东西:
def __repr__(self):
return "OrderedSet(%r)" % self.list
以及相应的构造函数:
def __init__(self, elements):
self.list = elements
这样,repr(OrderedSet([1,2,3]))
返回字符串OrderedSet([1,2,3])
,当eval
用时,它将调用构造函数并创建该类的新实例。
答案 1 :(得分:0)
没有。 __repr__()
必须返回一个字符串或许多代码会中断。
尝试这种方法:__repr__()
应返回有效的Python代码。这将允许你
second = eval(repr(first))
那就是说,整个想法看起来很可疑。感觉就像你试图想出一种聪明的方法来序列化或克隆对象。
使用pickling进行序列化或使用json
模块。要克隆,请使用copy constructor。