Ответ 1
Вы можете сделать это:
getattr(CallMe, variable)()
getattr - встроенный метод, он возвращает значение именованного атрибута объекта. Значение в этом случае является объектом метода, который вы можете вызвать с помощью()
Если у меня есть класс Python и вы хотите вызвать функцию из него в зависимости от переменной, как бы я это сделал? Я мог предположить, что следующее:
class CallMe: # Class
def App(): # Method one
...
def Foo(): # Method two
...
variable = "App" # Method to call
CallMe.variable() # Calling App()
Но это не могло. Любой другой способ сделать это?
Вы можете сделать это:
getattr(CallMe, variable)()
getattr - встроенный метод, он возвращает значение именованного атрибута объекта. Значение в этом случае является объектом метода, который вы можете вызвать с помощью()
Ваш код не похож на python, возможно, вы хотите сделать это?
class CallMe:
def App(self): #// Method one
print "hello"
def Foo(self): #// Method two
return None
variable = App #// Method to call
CallMe().variable() #// Calling App()
Вы можете использовать getattr, или вы можете назначить связанные или несвязанные методы переменной. Связанные методы привязаны к определенному экземпляру класса, а несвязанные методы привязаны к классу, поэтому вам нужно передать экземпляр в качестве первого параметра.
например.
class CallMe:
def App(self):
print "this is App"
def Foo(self):
print "I'm Foo"
obj = CallMe()
# bound method:
var = obj.App
var() # prints "this is App"
# unbound method:
var = CallMe.Foo
var(obj) # prints "I'm Foo"
Ваш класс объявлен как "класс старого стиля". Я рекомендую вам сделать все ваши классы "классами нового стиля".
Разница между старым и новым заключается в том, что классы нового стиля могут использовать наследование, которое вам может не понадобиться сразу. Но это хорошая привычка вступать.
Вот вам все, что вам нужно сделать, чтобы создать класс нового стиля: вы используете синтаксис Python, чтобы сказать, что он наследует от "объекта". Вы делаете это, помещая круглые скобки после имени класса и помещая объект имени в круглые скобки. Например:
class CallMe(object): # Class
def App(): # Method one
...
def Foo(): # Method two
...
Как я уже сказал, вам может не понадобиться сразу использовать наследование, но это хорошая привычка. В StackOverflow есть несколько вопросов: "Я пытаюсь сделать X, и он не работает", и выясняется, что человек закодировал класс старого стиля.