开发VM翻译器时Python提示函数参数不足但已传参如何解决
问题根因
- 你定义在
VmWriter类中的generate_assembly_command_list是默认的实例方法,必须接收第一个参数self(实例对象),但你调用时直接使用类名VmWriter.generate_assembly_command_list(command_object)调用,没有传入对应的self参数,因此触发参数不足报错。 - 额外注意你报错堆栈里的调用行用了
file_name作为第二个参数,但你循环遍历字典键的变量是x,如果没有提前给file_name赋值,后续也会触发变量未定义报错。
解决方案
方案1:将方法改为静态方法
由于这个方法不需要访问类属性、实例属性,直接添加@staticmethod装饰器即可,不需要修改现有参数定义和调用逻辑:
class VmWriter: # 新增装饰器 @staticmethod def generate_assembly_command_list(command_object): intermediate_list = [] for x in command_object: for j in range(len(command_object[x])): # 这里如果之前写的是file_name,要改成x intermediate_list.append(VmWriter.generate_assembly_command(command_object[x][j], x)) return intermediate_list
同时检查generate_assembly_command方法是否也属于不需要访问实例/类属性的工具方法,如果是的话也给它加上@staticmethod装饰器,避免同类报错。
方案2:改用实例调用方法
在__init__方法中通过当前实例self调用该方法,self会自动作为第一个参数传入,不需要修改方法定义:
def __init__(self, command_object): # 把VmWriter.前缀替换为self. self.assembly_command_list = self.generate_assembly_command_list(command_object)
内容的提问来源于stack exchange,提问作者sabertenn
相关产品推荐
相关产品推荐

