如果我们在类中定义__str__方法:
class Point():
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self, key):
return '{},{}'.format(self.x, self.y)
所以我们可以立即将其对象转换为str:
a = Point(1, 1)
b = str(a)
print(b)
但据我所知,没有这样的__tuple__魔术方法,所以我不知道如何定义一个可以传递给tuple()的类,以便我们可以立即将其对象转换为元组.
解决方法:
元组“函数”(它实际上是一个类型,但这意味着你可以像函数一样调用它)将包含任何迭代,包括迭代器,作为它的参数.因此,如果您想将对象转换为元组,请确保它是可迭代的.这意味着实现一个__iter__方法,该方法应该是一个生成器函数(其主体包含一个或多个yield表达式).例如
>>> class SquaresTo:
... def __init__(self, n):
... self.n = n
... def __iter__(self):
... for i in range(self.n):
... yield i * i
...
>>> s = SquaresTo(5)
>>> tuple(s)
(0, 1, 4, 9, 16)
>>> list(s)
[0, 1, 4, 9, 16]
>>> sum(s)
30
您可以从示例中看到,几个Python函数/类型将使用iterable作为其参数,并使用它在生成结果时生成的值序列.