Python 如何使用_urepr_uu从中创建新对象?

Python 如何使用_urepr_uu从中创建新对象?,python,repr,Python,Repr,这是我真的不明白的。我正在尝试使用\uuu repr\uu从其输出创建一个新对象 我有一个类OrderedSet,它包含一个列表和组织它的方法。 此类的str方法是 def __str__(self): s = "Set contains: " for elem in self.list: s += (" '" + elem + "'") return s 现在我应该使用\uuuu repr\uuuu从中实例化一个新对象。 如Orderedset second=repr

这是我真的不明白的。我正在尝试使用
\uuu repr\uu
从其输出创建一个新对象

我有一个类OrderedSet,它包含一个列表和组织它的方法。 此类的str方法是

def __str__(self):
    s = "Set contains: "
    for elem in self.list: s += (" '" + elem + "'")
    return s
现在我应该使用
\uuuu repr\uuuu
从中实例化一个新对象。 如
Orderedset second=repr(first)

我可以这样做吗

def __repr__(self):
    return self.list.__str__()
否。
\uuuu repr\uuuu()
必须返回字符串,否则大量代码将中断

尝试这种方法:
\uuu repr\uuu()
应该返回有效的Python代码。这样你就可以

second = eval(repr(first))
也就是说,整个想法看起来很可疑。感觉就像你试图想出一个聪明的方法来序列化或克隆对象

用于序列化,或者可能用于
json
模块。要克隆,请使用。

使用
\uuuuu repr\uuuuu
创建新对象”背后的思想是
\uuuu repr\uuuu
的输出,当使用
eval
进行解释时,会创建原始对象的(副本)。例如,
repr(“foo”)
return
“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
计算时,该字符串将调用构造函数并创建类的新实例。

使用
eval(repr(某些对象))
?请参见,例如,作为旁注:
列表
是一个错误的变量名,因为存在同名的内置函数。