Si nous définissons la méthode __str__
Dans une classe:
class Point():
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self, key):
return '{},{}'.format(self.x, self.y)
Nous pouvons donc convertir son objet en str immédiatement:
a = Point(1, 1)
b = str(a)
print(b)
Mais pour autant que je sache, il n'y a pas une telle méthode magique __Tuple__
, Donc je ne sais pas comment définir une classe qui peut passer à Tuple()
pour que nous puissions convertir son objet en Tuple immédiatement.
La Tuple
"fonction" (c'est vraiment un type, mais cela signifie que vous pouvez l'appeler comme une fonction) prendra tout itérable, y compris un itérateur, comme argument. Donc, si vous souhaitez convertir votre objet en tuple, assurez-vous qu'il est itérable. Cela signifie implémenter un __iter__
, qui doit être une fonction de générateur (une dont le corps contient une ou plusieurs expressions yield
). par exemple.
>>> 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
Vous pouvez voir dans l'exemple que plusieurs fonctions/types Python prendront un itérable comme argument et utiliseront la séquence de valeurs qu'il génère pour produire un résultat.