使用 class 函数数组初始化 class 变量
Initializing a class variable with array of class functions
我想创建一个成员函数数组作为 class 变量,这样我就可以在整个 class 等范围内切换。下面的方法不起作用
class A:
def b(self):
pass
def c(self):
pass
d = [A.b, A.c]
因为A还没有创建。有解决方法吗?我设法想到了两个:1)初始化 __init__
中的 class 变量,我不喜欢它,因为它会导致它在每个创建的对象时重新初始化;和 2) 将它创建为我也不喜欢的全局变量,因为它仅在 class 中使用,因此应该是一个 class 变量。
您不能在那里使用 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'
如果你想要一个 bound 方法的列表(其中 self
作为当前实例隐式传递),你需要创建该列表实际实例:
class A:
def __init__(self):
self.d = [self.b, self.c]
...
或者,您需要将 self
显式传递给未绑定方法:
class A:
...
d = [b, c]
def foo(self):
self.d[0](self)
我想创建一个成员函数数组作为 class 变量,这样我就可以在整个 class 等范围内切换。下面的方法不起作用
class A:
def b(self):
pass
def c(self):
pass
d = [A.b, A.c]
因为A还没有创建。有解决方法吗?我设法想到了两个:1)初始化 __init__
中的 class 变量,我不喜欢它,因为它会导致它在每个创建的对象时重新初始化;和 2) 将它创建为我也不喜欢的全局变量,因为它仅在 class 中使用,因此应该是一个 class 变量。
您不能在那里使用 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'
如果你想要一个 bound 方法的列表(其中 self
作为当前实例隐式传递),你需要创建该列表实际实例:
class A:
def __init__(self):
self.d = [self.b, self.c]
...
或者,您需要将 self
显式传递给未绑定方法:
class A:
...
d = [b, c]
def foo(self):
self.d[0](self)