用类函数数组初始化类变量

时间:2018-12-06 10:18:39

标签: python class-variables first-class-functions

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

class A:
    def b(self):
        pass

    def c(self):
        pass

    d = [A.b, A.c]

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

1 个答案:

答案 0 :(得分:3)

您不能在此处使用A.b,因为正如您所说的,A尚未定义。但是您可以直接从名称空间中按功能名称选择功能:

class A:
    def b(self):
        pass

    def c(self):
        pass

    d = [b, c]

但是,这无济于事,因为现在您有了 unbound 方法的列表:

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

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

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

    ...

或者,您需要将self显式传递给未绑定的方法:

class A:
    ...

    d = [b, c]

    def foo(self):
        self.d[0](self)