Python、Py.test问题:如何调用被测类之外的类的本地函数?
解决TypeError: k_bar() missing required positional argument: 'delta'的问题
这问题我之前写面向对象代码时也踩过坑!核心原因是你把实例方法当成类方法来调用了,导致self占用了你的第一个参数alpha,最后delta就没传进去,才报这个错。
问题拆解
当你直接写:
k = AgentCOne.k_bar(alpha, beta, delta)
Python会默认把第一个传入的alpha当成实例方法要求的self参数,剩下的参数对应到方法定义里的第二个、第三个参数,原本该传的delta就成了缺失项,完美对应你遇到的错误。
两种解决方案
根据你的代码需求选一种就行:
方案1:把k_bar改成类方法(不需要依赖实例属性时用)
如果k_bar的逻辑不需要用到AgentCOne实例的任何属性,直接给方法加上@classmethod装饰器,把第一个参数改成cls:
class AgentCOne: @classmethod def k_bar(cls, alpha, beta, delta): # 你的原有实现代码 pass
改完后直接用AgentCOne.k_bar(alpha, beta, delta)调用就正常了。
方案2:先实例化再调用(需要用到实例属性时用)
如果k_bar必须依赖AgentCOne实例的属性(比如初始化时传入的某些值),那先创建实例再调用方法:
# 先实例化,如果AgentCOne的__init__需要参数就传对应值 my_agent = AgentCOne() # 用实例调用方法,Python会自动把my_agent传给self参数 k = my_agent.k_bar(alpha, beta, delta)
最后检查
去你导入的模块里看AgentCOne中k_bar的定义,确认它的参数列表和用途,再对应调整调用方式或者添加装饰器就行啦!
内容的提问来源于stack exchange,提问作者econstud12345
相关产品推荐
相关产品推荐

