显式指定变量名后Python类回调方法失效问题排查
问题原因与解决办法
你的代码里,调用A.callback_method(x=10, y=11, z=12)失效的核心原因是参数接收方式不匹配:
- 你给
callback_method定义的参数是*args,这个语法仅负责把传入的位置参数打包成元组,完全无法处理带变量名的关键字参数。当你传关键字参数时,Python找不到对应接收的参数定义,就会直接抛出报错。 ClassB的__init__本身既支持位置参数也支持关键字参数,但callback_method的参数定义没给关键字参数留传递入口,自然没法把这类参数传给ClassB的构造方法。
解决办法
把callback_method的参数改成同时支持位置参数和关键字参数的形式,用*args, **kwargs组合:
class ClassA(): def __init__(self, a, b): self.a = a self.b = b def method_a(self): return f'A, method_a, {self.a}, {self.b}' def callback_method(self, *args, **kwargs): # 新增**kwargs接收关键字参数 obj = ClassB(*args, **kwargs) # 同时解包位置参数和关键字参数 return obj.method_b() class ClassB(): def __init__(self, x, y, z): self.x = x self.y = y self.z = z def method_b(self): return f'B, method_b, {self.x}, {self.y}, {self.z}'
修改后,不管是传位置参数A.callback_method(10,11,12),还是关键字参数A.callback_method(x=10,y=11,z=12),都能正常创建ClassB对象并调用method_b。
内容的提问来源于stack exchange,提问作者beta green
相关产品推荐
相关产品推荐

