Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字符串调用方法_Python_Oop - Fatal编程技术网

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

如果我有一个Python类,并且希望根据一个变量从中调用一个函数,我将如何做?我想象以下几点可以做到:

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

      ...