关于python:类不能正确处理*参数

class can not deal with *args properly

本问题已经有最佳答案,请猛点这里访问。

我编写了一个类,其中有一个函数接受*args的多个输入,但是运行结果证明它只接受第二个输入的参数,就像self接受第一个输入一样,这里有一个简化的代码:

1
2
3
4
5
6
7
class incorrect():
    def itera(self, *args):
        for i in args:
            print(i)

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

输出12丢失:

1
2
23
34

有什么问题?我怎样才能解决这个问题?


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

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

或者您可以在签名中省略self,使用decorator @staticmethod

1
2
3
4
@staticmethod
def itera(*args):
    for i in args:
        print(i)

或者你可以把它改成:

1
2
3
4
@classmethod
def itera(cls, *args):
    for i in args:
        print(i)


您正在调用类本身的方法,而不是类的实例。创建实例,然后对其调用方法:

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

当您在类本身上调用它时,它充当一个静态方法,并且由于没有要传递的self,因此不再隐式传递self