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

27

如果我们在一个类中定义了__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)

我知道我们可以定义自定义对象的字符串表示形式,但是如何定义对象的列表——更精确地说,元组——表示形式呢?


4
请提供一些你想转换为元组的示例代码,以便我们可以帮助你。同时请查看此链接:https://dev59.com/aGcs5IYBdhLWcg3wdjvR -> 此链接特定于列表,但可能对你有所帮助。 - Angelos Chalaris
1个回答

42

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 函数/类型将以可迭代对象作为参数并使用它所生成的值序列来产生结果。


1
我发现我们也可以定义__getitem__方法使类可迭代 - acgtyrant
我在今年早些时候给PyData London的演讲中解释了迭代协议。它可能会有所帮助 - 这里还有演讲的视频 - holdenweb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接