Python 从字符串调用方法
如果我有一个Python类,并且希望根据一个变量从中调用一个函数,我将如何做?我想象以下几点可以做到:Python 从字符串调用方法,python,oop,Python,Oop,如果我有一个Python类,并且希望根据一个变量从中调用一个函数,我将如何做?我想象以下几点可以做到: class CallMe: # Class def App(): # Method one ... def Foo(): # Method two ... variable = "App" # Method to call CallMe.variable() # Calling App() 但它不能。还有其他方法吗?您可以这样做: getatt
class CallMe: # Class
def App(): # Method one
...
def Foo(): # Method two
...
variable = "App" # Method to call
CallMe.variable() # Calling App()
但它不能。还有其他方法吗?您可以这样做:
getattr(CallMe, variable)()
是一个内置方法,它返回对象的命名属性的值。本例中的值是一个方法对象,您可以使用()调用它。您的代码看起来不像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,也可以将绑定或未绑定方法指定给变量。绑定方法绑定到类的特定实例,而未绑定方法绑定到类,因此必须将实例作为第一个参数传入 e、 g
您的类已声明为“旧式类”。我建议你把所有的课程都改成“新式课程” 新旧类之间的区别在于,新样式的类可以使用继承,而您可能不需要立即使用继承。但这是一个好习惯 下面是创建一个新样式类所需做的全部工作:使用Python语法表示它继承自“object”。通过将括号放在类名之后,并将name对象放在括号内,可以做到这一点。像这样:
class CallMe(object): # Class
def App(): # Method one
...
def Foo(): # Method two
...
正如我所说,您可能不需要立即使用继承,但这是一个好习惯。这里有几个关于StackOverflow的问题,大意是“我正在尝试执行X,但它不起作用”,结果证明此人编写了一个旧式类。如何决定在
变量中放置什么值?
?我将使用传递到文件的参数。:)如果我有一个值为“CallMe”
的字符串,请告诉我该怎么办?同样的方法也适用于模块。如果CallMe
在作为m
导入的模块中,则getattr(m,'CallMe')
将返回该类。
class CallMe(object): # Class
def App(): # Method one
...
def Foo(): # Method two
...