【发布时间】:2017-10-19 19:27:09
【问题描述】:
在定义了__iter__()的自定义对象中,调用tuple(obj)时,它以元组形式返回__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__方法的想法的?它不在data model 中。这是您应该预料到的行为。 -
不可能
print(tuple(ex))打印[3, 2]。那不是元组。 -
请投票关闭它,因为如果它留下来会破坏我的代表。我曾假设
__tuple__()存在,老实说从未想过它不会。毕竟,__str__()存在。 -
它关闭了。
标签: python python-3.x object methods