У меня есть класс (node
), к которому я хочу присвоить определенный набор функций (в данном случае a1
, a2
, b1
и b2
) на основе параметр класса (operatingMode
).Как добавить функции к классу на основе параметра
Ситуация в том, что у меня есть двигатель, который имеет много разных режимов работы. Каждый режим работы позволяет выполнять определенные функции, но не другие. Назначение функций в различные режимы осуществляется таким образом, чтобы не создавать приятные условия для создания классов для каждого режима работы.
Ниже мой пропуск по решению, но он не работает.
Любые мысли?
def a1(self):
return 'a1'
def a2(self):
return 'a2'
def b1(self):
return 'b1'
def b2(self):
return b2
class node(object):
def __init__(self,operatingMode):
self.operatingMode=operatingMode
if self.operatingMode=='A':
self.a1function=a1
self.a2function=a2
print 'Operating Mode \'A\' functions loaded'
if self.operatingMode=='B':
self.b1function=b1
self.b2function=b2
print 'Operating Mode \'B\' functions loaded'
def setOperatingMode(self,operatingMode):
self.operatingMode=operatingMode
self.__init__(self,operatingMode)
Запуск этого в моем терминале позволяет мне назвать это, но я должен заявить локоть дважды:
In [65]: elbow=node('A')
Operating Mode 'A' functions loaded
In [66]: elbow.a1function(elbow)
Out[66]: 'a1'
пытается запустить elbow.setOperatingMode('B')
дает ошибку.
это не совсем понятно, что вы пытаетесь достичь, но вы пытаетесь 'себя .a1function = a1' и т. д.? – BrenBarn
+1 к @BrenBarn. Или, альтернативно, возможно, 'self.functions = {}', затем 'self.functions ['a1'] = a1функция'? Не зная, как вы надеетесь _call_ эти методы, трудно сказать, как это сделать правильно. – abarnert
На другом узле: вызов '__init__' из другого метода, как правило, очень плохая идея. Если у вас есть код, который вы хотите вызывать как '__init__', так и' setOperatingMode', абстрагируйте его в методе, который они оба вызывают (или имеют '__init__' вызов' setOperatingMode', а не наоборот). – abarnert