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

Sap*_*ire 5 python repr

这不是我真正得到的。我试图用来__repr__从其输出创建一个新对象。

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

def __str__(self):
    s = "Set contains: "
    for elem in self.list: s += (" '" + elem + "'")
    return s
Run Code Online (Sandbox Code Playgroud)

现在,我应该以__repr__某种方式使用它来实例化一个新对象。喜欢Orderedset second = repr(first)

我可以这样吗?

def __repr__(self):
    return self.list.__str__()
Run Code Online (Sandbox Code Playgroud)

tob*_*s_k 6

“使用创建新对象”背后的想法__repr__是, 的输出__repr__ 可以是有效的 python 代码,当用 解释时eval,它会创建原始对象(的副本)。例如,repr("foo")return "'foo'"(包括引号)或repr([1,2,3])returns '[1, 2, 3]'

在你的例子中,你可能需要这样的东西:

def __repr__(self):
    return "OrderedSet(%r)" % self.list
Run Code Online (Sandbox Code Playgroud)

以及相应的构造函数:

def __init__(self, elements):
    self.list = elements
Run Code Online (Sandbox Code Playgroud)

这样,repr(OrderedSet([1,2,3]))返回 string OrderedSet([1,2,3]),该 string 在eval使用时将调用构造函数并创建该类的新实例。