定义变量后类回调不起作用

bet*_*een 1 python

我正在尝试回调另一个类中的类方法。如果我在创建对象时不定义变量 x,y,z (请参阅注释部分),它就可以正常工作。但是,如果我显式定义变量名称,则它不起作用。想知道是什么导致了这种情况发生?

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):
        obj = ClassB(*args)
        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 = ClassA(a=1, b=2)
print(A.method_a())
# A, method_a, 1, 2

B = ClassB(x=3, y=4, z=5)
print(B.method_b())
# B, method_b, 3, 4, 5

print(A.callback_method(10, 11, 12))
# B, method_b, 10, 11, 12

# print(A.callback_method(x=10, y=11, z=12)) # <------ doesn't work

Run Code Online (Sandbox Code Playgroud)

rda*_*das 5

您将callback_method 定义为仅接受带位置参数*args但不接受关键字参数。

相反,您可以让它接受两者并将其传递给它ClassB,以确保您可以使用位置或关键字参数调用它:

class ClassA():
    ...

    def callback_method(self, *args, **kwargs):
        obj = ClassB(*args, **kwargs)
        return obj.method_b()
Run Code Online (Sandbox Code Playgroud)

结果:

print(A.callback_method(x=10, y=11, z=12))  # Output: 'B, method_b, 10, 11, 12'

Run Code Online (Sandbox Code Playgroud)