在Python中模拟列表

2024-06-17 13:28:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

使用普通列表():

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

我得到的,基本上是:

^{pr2}$

我不知道哪个dunder方法(如果有的话)允许我定制这个行为?在

我觉得应该是?虽然list()没有实现get/set/delete-我猜是因为它是一个内置的?在


Tags: 方法列表get情况delete内置listset
3条回答

您正在寻找wolud的方法是__repr__。 另请参见http://docs.python.org/reference/datamodel.html#object.repr

您应该重写类中的__repr__方法(也可以选择使用__str__方法),有关差异的讨论,请参阅post。在

像这样:

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

正如注释中所指出的,str()如果__str__没有定义,str()调用__repr__,但是如果__repr__没有定义,repr()则不调用__str__。在

一个非常简单的例子:

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

输出:

^{pr2}$

相关问题 更多 >