在Python中模拟列表

la1*_*111 6 python types list

我正在使用一个模拟python列表的类.我想在没有索引的情况下访问它时将其作为python list()返回.

使用普通列表():

>>> a = [1,2,3]
>>> a
[1,2,3]

我得到的,基本上:

>>> a = MyList([1,2,3])
>>> a
<MyList object at 0xdeadbeef>

我无法弄清楚哪种dunder方法(如果有的话)可以让我自定义这种行为?

我认为__得到__?虽然list()没有实现get/set/delete - 我猜是因为它是内置的?

Ósc*_*pez 4

您应该重写__repr__类中的方法(也可以选择重写该__str__方法),请参阅这篇文章以获取有关差异的讨论。

像这样的东西:

class MyList(object):
    def __repr__(self):
        # iterate over elements and add each one to resulting string
Run Code Online (Sandbox Code Playgroud)

正如注释中指出的,如果未定义则调用,但str()如果未定义则不调用。__repr____str__repr()__str____repr__

  • 如果您只想实现一个,请实现“__repr__”而不是“__str__”。如果未定义 __str__`,则 `str` 会调用 `__repr__`,但如果未定义 `__repr__`,则 `repr` 不会调用 `__str__`。 (2认同)