在函数中作为参数传递对象的魔术方法?

时间:2017-11-19 14:41:49

标签: python python-3.x arguments

当我将对象作为函数的参数传递时,是否会调用任何魔术方法?

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 个答案:

答案 0 :(得分:2)

不,函数的参数不会以任何方式处理。它只是另一个赋值(对函数的参数名称)。

如果您需要将ab视为单独的参数,请将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