Python robi to:

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

Jak mogę wdrożyć moją klasę, aby to zrobić

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

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

Czy istnieje magiczna funkcja, którą mógłbym zaimplementować, aby to osiągnąć?

0
user12546101 12 marzec 2020, 00:00

2 odpowiedzi

Najlepsza odpowiedź

Musisz sprawić, by Twoja klasa była iterowalna. Zrób to, dodając do niego metodę __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)

Wynik:

1 2
3
wjandrea 11 marzec 2020, 22:07

Jeśli Twoja klasa nie robi zbyt wiele, możesz skorzystać z nazwana krotka:

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

Przy okazji, uwaga dotycząca stylu: nazwy klas powinny mieć postać UpperCamelCase.

1
wjandrea 11 marzec 2020, 22:17