解包类变量

时间:2017-09-10 21:02:28

标签: python-3.x class

使用collections.namedtuple,可以制作Point = namedtuple('Point', 'x y')并设置p = Point(2,3),然后使用p解包x, y = p

类可以做类似的事吗? e.g

class Point:
    def __init__(self,x ,y):
        self.x = x
        self.y = y
p = Point(2,3)
x,y = p
print(f"x: {x}, y: {y}")
>>> x: 2, y: 3

这会导致错误,但是如何才能获得namedtuple的效果呢?

2 个答案:

答案 0 :(得分:2)

class Point:
    def __init__(self, x, y):
        self._flag = 2
        self.x = x
        self.y = y

    def __iter__(self):
        return self

    def __next__(self):
        if self._flag == 2:
            self._flag = 1
            return self.x
        elif self._flag == 1:
            self._flag = 0
            return self.y
        else:
            raise StopIteration()


p = Point(5, 6)

(x, y) = p

答案 1 :(得分:-1)

为了获得命名元组的效果,让你的类成为元组的子类。 查看我类似的question并回答