带有__iter __()的自定义对象不返回__tuple __()中定义的内容?
问题描述:
在定义了__iter__()
的自定义对象中,当调用tuple(obj)
时,它以元组形式返回__iter__()
的数据,但我希望它从__tuple__()
返回。带有__iter __()的自定义对象不返回__tuple __()中定义的内容?
这是一个非常大的班级,我不想在这里粘贴它。我反而写了一个我的问题的小例子。
class Example:
def __init__(self, a, b):
self.data = [a, b]
def __iter__(self):
return iter(reversed(self.data))
def __tuple__(self):
return map(str, self.data)
ex = Example(2, 3)
print([x for x in ex]) # Should return the data from __iter__().
>>> [3, 2] # Reversed, good...
print(tuple(ex)) # Now calling: __tuple__().
>>> (3, 2) # Should have returned ["2", "3"].
如果您需要查看我的所有代码,请询问我将它放入Pastebin中。我只是想为您节省通过所有这些额外方法进行排序的努力。
是否__iter__()
覆盖__tuple__()
类型?出于某种原因,我无法改变它从__tuple__()
返回应该返回的内容。
在此先感谢。
您究竟在哪里实现了'__tuple__'方法?它不在[数据模型](https://docs.python.org/3/reference/datamodel.html)中。这是你应该预期的行为。 – jonrsharpe
没有办法'打印(元组(ex))''打印'[3,2]''。这不是一个元组。 – user2357112
请投票结束此事,因为如果它留下,它会毁掉我的代表。我以为'__tuple __()'存在,说实话从来没有想过它不会。毕竟,存在'__str __()'。 – spikespaz