2017-09-11 44 views
1

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

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

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

和输出,12丢失:

23 
34 

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

+0

这些答案是如何有这么多upvotes的问题是一个公然的主题错字? –

+1

因为在答案发布之前没有人发现重复? :) – MSeifert

+0

@ MSeifert这不是一个重复的...它只是一个错字 –

回答

6

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

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

或者你可以省略签名和使用装饰@staticmethodself

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

或者你可以把它classmethod

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

我没有downvoted但你可以'打印(个体经营)'里面的功能以“证明”你的说法,也许还详细阐述*为何*'自= 12'如果你调用它的类:) – MSeifert

+0

我想这是不是最好的* *解释你可以提供。但无论如何这是正确的。 –

+0

相反省略'self'的(不这样做,你会如果你调用它的实例有类似的问题),使它成为一个'@ staticmethod'。 – MSeifert

5

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

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

当你调用它的类本身,它作为一个静态方法,并self不再是隐式传递,因为有没有self传递。