1

我想创建一个成员函数数组作为类变量,这样我就可以在整个类中切换等。以下不起作用

class A:
    def b(self):
        pass

    def c(self):
        pass

    d = [A.b, A.c]

因为 A 尚未创建。有解决方法吗?我设法想到了两个:1)初始化__init__我不喜欢的类变量,因为它会导致它在创建每个对象时重新初始化;2)将它创建为我也不喜欢的全局变量,因为它只在类中使用,因此应该是类变量。

4

1 回答 1

3

您不能A.b在那里使用,因为正如您所说,A尚未完成定义。但是您可以直接从命名空间中按名称获取函数:

class A:
    def b(self):
        pass

    def c(self):
        pass

    d = [b, c]

但是,这对您没有帮助,因为现在您有一个未绑定方法的列表:

>>> A().d[0]()
TypeError: b() missing 1 required positional argument: 'self'

如果您想要一个绑定方法列表(其中self作为当前实例隐式传递),则需要在有实际实例时创建该列表:

class A:
    def __init__(self):
        self.d = [self.b, self.c]

    ...

或者,您需要self显式传递给 unbound 方法:

class A:
    ...

    d = [b, c]

    def foo(self):
        self.d[0](self)
于 2018-12-06T10:30:41.743 回答