Python导入类方法调用报错:传1个参数却提示收到2个参数
Python类方法调用参数不匹配报错解决方案
报错原因
Python 类的实例方法默认会将调用方法的实例对象作为第一个位置参数自动传入,该参数通常命名为self。你定义greet方法时未添加self参数,调用实例方法时,自动传入的实例+你手动传入的1个参数总计2个,与方法定义的1个参数要求不符,因此触发TypeError: greet() takes 1 positional argument but 2 were given。
修复方案
方案1:按标准实例方法定义(推荐)
修改importDemo.py中的greet方法,在参数首位添加self:
# importDemo.py 修正后代码 class basicFunction: # 类属性可保留原有定义 myName = "默认名称" def __init__(self): # 构造方法原有逻辑保留 self.myName = "自定义实例名称" # 首位添加self参数 def greet(self, name): # 方法原有逻辑保留 print(f"你好,{name}")
修正后主程序的实例调用逻辑可正常运行,若要保留func.greet("Ben")的类直接调用写法,需要手动传入实例作为第一个参数:
# FunctionsDemo.py 调用示例 from importDemo import basicFunction as func firstObj = func() # 自动触发__init__构造方法 firstObj.greet(firstObj.myName) # 正常运行 func.greet(firstObj, "Ben") # 类直接调用时手动传入实例即可
方案2:定义为静态方法(支持原主程序代码无修改运行)
如果greet方法不需要访问实例或类的属性/方法,可以添加@staticmethod装饰器声明为静态方法,不需要self参数:
# importDemo.py 静态方法实现 class basicFunction: myName = "默认名称" def __init__(self): self.myName = "自定义实例名称" @staticmethod def greet(name): print(f"你好,{name}")
修正后原主程序代码无需任何修改即可正常运行:
from importDemo import basicFunction as func firstObj = func() firstObj.greet(firstObj.myName) func.greet("Ben")
内容的提问来源于stack exchange,提问作者KiritoLyn
相关产品推荐
相关产品推荐

