class无法正确处理*args

Ama*_*Gûl 2 python class

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

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

a = incorrect
a.itera(12, 23, 34)
Run Code Online (Sandbox Code Playgroud)

输出12丢失了:

23
34
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*sky 6

那是因为你使用它的类,因此self12args[33, 34].您可以通过创建实例来修复它:

a = incorrect()
a.itera(12, 23, 34)
Run Code Online (Sandbox Code Playgroud)

或者你可以self在签名和使用装饰器中省略@staticmethod:

@staticmethod
def itera(*args):
    for i in args:
        print(i)
Run Code Online (Sandbox Code Playgroud)

或者你可以做到classmethod:

@classmethod
def itera(cls, *args):
    for i in args:
        print(i)
Run Code Online (Sandbox Code Playgroud)


Car*_*ate 5

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

a = incorrect() # Add () to create instance
a.itera(12, 23, 34)
Run Code Online (Sandbox Code Playgroud)

当你调用它的类本身,它作为一个静态方法,而self不再是隐式传递,因为那里没有self通过.