Skip to main content
 首页 » 编程设计

python之在对象中实现打包/解包

2025年05月04日14lautakyan007

我有一个只包含属性的类,我想对其进行打包/解包。我应该实现什么 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]