使用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的效果呢?
答案 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并回答