Как a, b = myClass (a, b) в Python? - PullRequest
0 голосов
/ 12 марта 2020

Python делает это:

t = (1, 2)
x, y = t
# x = 1
# y = 2

Как я могу реализовать свой класс, чтобы сделать

class myClass():
    def __init__(self, a, b):
        self.a = a
        self.b = b

mc = myClass(1, 2)
x, y = mc
# x = 1
# y = 2

Есть ли функция волхва c, которую я мог бы реализовать, чтобы достичь этого?

Ответы [ 2 ]

4 голосов
/ 12 марта 2020

Вам нужно сделать свой класс повторяемым . Сделайте это, добавив к нему метод __iter__.

class myClass():
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def __iter__(self):
        return iter([self.a, self.b])

mc = myClass(1, 2)

x, y = mc

print(x, y)

Выход:

1 2
1 голос
/ 12 марта 2020

Если ваш класс не делает ничего другого, вы можете предпочесть использовать с именем tuple :

from collections import namedtuple

MyClass = namedtuple('MyClass', 'a b')
mc = MyClass(1, 2)
print(mc.a, mc.b)  # -> 1 2
x, y = mc
print(x, y)  # -> 1 2

Кстати, примечание стиля: Имена классов должны быть UpperCamelCase.

...