class无法正确处理* args

时间:2017-09-11 12:17:01

标签: python class

我写了一个类,其中有一个函数接受*args的几个输入,但是运行结果证明它只接受来自第二个的参数,就像self取第一个,这里和#39;简化代码:

class incorrect():
    def itera(self, *args):
        for i in args:
            print(i)

a = incorrect
a.itera(12, 23, 34)

输出12丢失了:

23
34

有什么问题?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

这是因为您在课堂上使用它,因此self12args[33, 34]。您可以通过创建实例来修复它:

a = incorrect()
a.itera(12, 23, 34)

或者您可以在签名中省略self并使用装饰器@staticmethod

@staticmethod
def itera(*args):
    for i in args:
        print(i)

或者你可以成功classmethod

@classmethod
def itera(cls, *args):
    for i in args:
        print(i)

答案 1 :(得分:5)

您在类本身上调用方法,而不是类的实例。创建一个实例,然后调用它上面的方法:

a = incorrect() # Add () to create instance
a.itera(12, 23, 34)

当你在类本身上调用它时,它充当静态方法,并且不再隐式传递self,因为 没有self传递。