Python自定义Stack类调用apnd方法报missing positional arguments错误排查
错误原因
你遇到的missing 1 positional arguments报错根源是对Python实例方法的调用逻辑理解有误:
- 类中定义的普通方法默认是实例方法,第一个参数
self会在你通过类实例调用方法时,由Python自动传入,指向当前调用方法的实例对象。 - 你的代码直接通过类本身
Stack调用apnd方法,此时Python不会自动绑定self值,你传入的字符串"PYTHON"会被赋值给self形参,方法定义中要求的data形参没有收到传入值,就会触发缺少位置参数的报错。
修正方案
常规使用场景下,你需要先创建Stack类的实例,再通过实例调用入栈方法,修正后的可运行代码如下:
class Stack: def __init__(self): self.pystack = [] def apnd(self, data): self.pystack.append(data) # 1. 先创建栈的实例对象 stack_instance = Stack() # 2. 通过实例调用入栈方法,此时self会自动绑定为stack_instance stack_instance.apnd("PYTHON") # 验证入栈结果 print(stack_instance.pystack) # 输出:['PYTHON']
补充:如果你强行通过类调用实例方法,需要手动把实例作为第一个参数传入,写法为
Stack.apnd(stack_instance, "PYTHON"),但这种写法不符合常规编码规范,不建议使用。
内容的提问来源于stack exchange,提问作者Harjot Gill
相关产品推荐
相关产品推荐

