如何在Python中将自定义类对象转换为元组?

How to convert an custom class object to a tuple in Python?

如果我们在类中定义__str__方法:

1
2
3
4
5
6
7
8
class Point():
    def __init__(self, x, y):
        self.x = x
        self.y = y


    def __str__(self, key):
        return '{},{}'.format(self.x, self.y)

因此我们可以立即将其对象转换为str:

1
2
3
a = Point(1, 1)
b = str(a)
print(b)

但据我所知,没有这样的__tuple__魔术方法,所以我不知道如何定义一个类,它可以传递给tuple()以便我们可以立即将它的对象转换成tuple。


tuple的"函数"(它实际上是一个类型,但这意味着您可以像函数一样调用它)将采用任何一个iterable(包括迭代器)作为其参数。所以,如果你想把你的对象转换成一个元组,只要确保它是可重设的。这意味着实现一个__iter__方法,该方法应该是一个生成器函数(其主体包含一个或多个yield表达式)。例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> 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作为参数,并使用它在生成结果时生成的值序列。