当我将对象作为函数的参数传递时,是否会调用任何魔术方法?
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
答案 0 :(得分:2)
不,函数的参数不会以任何方式处理。它只是另一个赋值(对函数的参数名称)。
如果您需要将a
和b
视为单独的参数,请将Test
作为序列,然后将其与*sequence
一起传递调用语法将序列扩展为单独的参数。您可以将其设为iterator type:
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