Инициализация переменной класса с массивом функций класса
Я хотел бы создать массив функций-членов как переменную класса, чтобы я мог переключаться по всему классу и т. Д. Следующее не работает
class A:
def b(self):
pass
def c(self):
pass
d = [A.b, A.c]
потому что А еще не создан. Есть ли обходной путь для этого? Мне удалось придумать два: 1) инициализировать переменную класса в __init__
что мне не нравится, потому что это приведет к его повторной инициализации с каждым созданным объектом; и 2) создать его как глобальную переменную, которая мне тоже не нравится, так как она используется только внутри класса и поэтому должна быть переменной класса.
1 ответ
Вы не можете использовать 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
явно для несвязанного метода:
class A:
...
d = [b, c]
def foo(self):
self.d[0](self)