我写了一个类,其中有一个函数接受*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
有什么问题?我该如何解决这个问题?
答案 0 :(得分:6)
这是因为您在课堂上使用它,因此self
为12
而args
为[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
传递。