python - 使用类函数数组初始化类变量

标签 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)将其创建为全局变量,我也不喜欢它,因为它仅在类中使用,因此应该是一个类变量。

最佳答案

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

class A:
    def b(self):
        pass

    def c(self):
        pass

    d = [b, c]

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

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

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

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

    ...

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

class A:
    ...

    d = [b, c]

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

关于python - 使用类函数数组初始化类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53649105/

相关文章:

python - 在 python 中实现观察者模式的替代方法

python - 无法在pycharm中安装BeautifulSoup

Python遍历 float 宽度列表: TypeError: sequence expected,生成器发现

python - 静态方法与类方法的类变量范围

C++:将模板函数作为参数传递给其他模板函数时的模板参数推导

javascript - 这两个函数如何等价?

python - 访问在本地 HTTP 主机上运行的视频流

python - 需要帮助用计数器将 else 放入 while

ruby - 在 Struct.new block 中访问类变量

ruby - Ruby 中的类变量