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