python - 将一个类强制转换为元组和" autobox"到一个for循环

时间:2014-11-26 20:06:28

标签: python tuples

我想知道,有没有一种方法可以通过以下方式将类实例转换为元组: 假设我们有一个带有字段x和y的A类,我们有一个包含A个实例的列表l。如果可能的话,我想做以下事情:

for (x, y) in l:
     print x + y #just an example

我正在考虑使用__iter__来返回x和y,但它并没有起作用。转换为元组工作正常,但它无法在for循环中将对象放入l到(x,y)中

我知道这听起来有些愚蠢,但是一位朋友正在挑战我正在做的事情,即使看起来可行,我也无法做到这一点

1 个答案:

答案 0 :(得分:4)

嗯,你可以__iter__

来做
def __iter__(self):
    yield self.x
    yield self.y

但我不推荐它。

如果您确定要将此内容视为元组,则可以使用namedtuple类:

import collections
XAndYClass = collections.namedtuple('XAndYClass', 'x y')
xandy = XAndYClass(1, 2)
print xandy.x # prints 1
x, y = xandy # x = 1, y = 2

如果需要,您可以从中继承添加方法。

class XAndYWithMethods(XAndYClass):
    def method(self):
        print 'doing stuff...'