Магический метод для передачи объекта в функцию в качестве аргумента?
Есть ли магический метод, который будет вызывать, когда я передаю объект в качестве аргумента функции?
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