c++ Python中的结构化绑定

hsvhsicv  于 2022-12-15  发布在  Python
关注(0)|答案(3)|浏览(168)

C++17引入了新的结构化绑定语法:

std::pair<int, int> p = {1, 2};
auto [a, b] = p;

python3中有类似的东西吗?我在考虑使用“splat”操作符将类变量绑定到一个列表,列表可以被解包并赋值给多个变量,就像这样:

class pair:
    def __init__(self, first, second):
        self.first = first
        self.second = second
...

p = pair(1, 2)
a, b = *p

这是可能的吗?如果是的话,我该如何实现它来为我自己的类工作呢?
Python中的元组是解决这个问题的一个简单方法,但是,内置类型在实现其他类方法时给予太大的灵活性。

pkmbmrz7

pkmbmrz71#

是的,你可以使用__iter__方法,因为迭代器也可以被解包:

class pair:
    def __init__(self, first, second):
        self.first = first
        self.second = second
    def __iter__(self):
        # Use tuple's iterator since it is the closest to our use case.
        return iter((self.first, self.second))

p = pair(1, 2)
a, b = p
print(a, b) # Prints 1 2
zzoitvuj

zzoitvuj2#

你可以使用元组和元组解包(参见Python文档中本节的底部):

p = (1, 2)
a, b = p
print(a, b) # Prints 1 2
bhmjp9jg

bhmjp9jg3#

dataclass的替代方案:

from dataclasses import dataclass, astuple

@dataclass
class pair:
    first: int
    second: int

p = pair(1, 2)
a, b = astuple(p)
print(a, b)

输出(在线试用!):

相关问题