我有一个只包含属性的类,我想对其进行打包/解包。我应该实现什么 collections.abc 才能获得此行为?
class Item(object):
def __init__(self, name, age, gender)
self.name = name
self.age = age
self.gender = gender
a, b, c = Item("Henry", 90, "male")
我想避免使用 namedtuple。
请您参考如下方法:
您可以解压任何 Iterable .这意味着您需要实现 __iter__ 方法,并返回一个迭代器。在您的情况下,这可能只是:
def __iter__(self):
return iter((self.name, self.age, self.gender))
或者你可以让你的类(class)成为Iterator ,然后 __iter__ 将返回 self 并且您需要实现 __next__;这是更多的工作,可能不值得付出努力。
有关详细信息,请参阅 What exactly are Python's iterator, iterable, and iteration protocols?
根据我上面链接的问题,您还可以使用 __getitem__ 实现可迭代:
def __getitem__(self, index):
return (self.name, self.age, self.gender)[index]
