我写了一个类,其中有一个函数接受几个输入*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)
问题是什么?我该如何解决这个问题?
那是因为你使用它的类,因此self是12和args是[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)
你在类本身上调用方法,而不是类的实例.创建一个实例,然后调用它上面的方法:
a = incorrect() # Add () to create instance
a.itera(12, 23, 34)
Run Code Online (Sandbox Code Playgroud)
当你调用它的类本身,它作为一个静态方法,而self不再是隐式传递,因为那里是没有self通过.
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |