在Python中模拟列表

时间:2012-09-30 22:11:46

标签: python list types

我正在使用一个模拟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 - 我猜是因为它是内置的?

4 个答案:

答案 0 :(得分:5)

您要查找的方法是__repr__。 另请参阅http://docs.python.org/reference/datamodel.html#object.repr

答案 1 :(得分:4)

您应该覆盖您班级中的__repr__方法(以及可选的__str__方法),有关差异的讨论,请参阅此post

这样的事情:

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

正如评论中所指出的,如果未定义str()__repr__会调用__str__,但repr()如果__str__则不会调用__repr__没有定义。

答案 2 :(得分:3)

一个非常简单的例子:

class MyList(object):
    def __init__(self,arg):
       self.mylist = arg
    def __repr__(self):
        return 'MyList(' + str(self.mylist) + ')'
    def __str__(self):
        return str(self.mylist)
    def __getitem__(self,i):
        return self.mylist[i]

a = MyList([1,2,3])
print a
print repr(a)
for x in a:
    print x

输出:

[1, 2, 3]
MyList([1, 2, 3])
1
2
3

答案 3 :(得分:0)

请允许我回答我自己的问题 - 我相信这是我正在寻找的__ repr __方法。如果我错了,请纠正我。这就是我想出的:

def __repr__(self):
    return str([i for i in iter(self)])