C 17 introduced the new structured bindings syntax:
std::pair<int, int> p = {1, 2};
auto [a, b] = p;
Is there something similar in python3? I was thinking of using the "splat" operator to bind class variables to a list, which can be unpacked and assigned to multiple variables like such:
class pair:
def __init__(self, first, second):
self.first = first
self.second = second
...
p = pair(1, 2)
a, b = *p
Is this possible? And if so, how would I go by implementing this to work for my own classes?
A tuple in Python works as a simple solution to this problem. However, built in types don't give much flexibility in implementing other class methods.
CodePudding user response:
Yes, you can use __iter__
method since iterators can be unpacked too:
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))
CodePudding user response:
You can use tuples and tuple unpacking (see the bottom of this section in the Python documentation):
p = (1, 2)
a, b = p
print(a, b) # Prints 1 2