Магический метод для передачи объекта в функцию в качестве аргумента?

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

class Test:
    def __init__(self, a, b):
         self.a = a
         self.b = b
    def __???__(self):
         return (self.a, self.b)

test = Test(0, 1)

some_function(test) # I'd like to pass parameters (0, 1) here

1 ответ

Решение

Нет, аргументы функций не рассматриваются как специальные. Это просто другое назначение (для имен параметров функции).

Если вам нужно лечить a а также b в качестве отдельных аргументов, сделать Test последовательность, а затем передать его с *sequence вызвать синтаксис, чтобы расширить последовательность для разделения аргументов. Вы можете сделать это последовательностью, сделав это типом итератора:

class Test:
    def __init__(self, a, b):
         self.a = a
         self.b = b
    def __iter__(self):
         return iter((self.a, self.b))

test = Test(0, 1)
some_function(*test)

Демо-версия:

>>> def some_function(a, b):
...     print(f'a = {a!r}\nb = {b!r}')
...
>>> test = Test(0, 1)
>>> some_function(*test)
a = 0
b = 1
Другие вопросы по тегам