Python 如何将成员函数名求值为函数对象?

Python 如何将成员函数名求值为函数对象?,python,eval,Python,Eval,我已经在类a中定义了一些函数 在类A中,我有一个函数,可以用它的名字调用另一个函数 但是当我使用eval('funcname')时,它表示函数未定义 如何将成员函数名评估为函数对象?您的问题并不完全清楚,但听起来好像您在问如何从该类中的另一个方法按名称调用该类中的一个方法 由于所有实例方法都有self参数,因此您只需通过getattr查找所需的方法即可: def call_by_name(self, method_name): method = getattr(self, method_

我已经在类a中定义了一些函数

在类A中,我有一个函数,可以用它的名字调用另一个函数

但是当我使用
eval('funcname')
时,它表示函数
未定义


如何将成员函数名评估为函数对象?

您的问题并不完全清楚,但听起来好像您在问如何从该类中的另一个方法按名称调用该类中的一个方法

由于所有实例方法都有
self
参数,因此您只需通过
getattr
查找所需的方法即可:

def call_by_name(self, method_name):
    method = getattr(self, method_name)
    method()

下面的工作,但你为什么要这样做

class A(object):
    def __init__(self):
        pass

    def fa(self):
        print('Hello')
    def fb(self):
#        self.fa()
        eval('self.fa()')

a = A()
a.fb()
我希望它是有用的

如果你想调用一个实例方法,这里是方法

class A:
def foo(self):
         print " ok"
         return "ok"
 def bar(self):
         #i = A()
         #print eval('i.foo()')
          print eval('self.foo()')
 a = A()
 a.bar()
方法是实例属性而不是类属性,因此我们必须调用
方法只通过实例执行。

但是它说“AttributeError:XXX实例没有属性'XXX'”,那么,它有该属性吗?展示一个真实的例子。我发现原因是要调用的函数是一个私有函数,但我不知道为什么?@TankyWoo我们故意避免让您使用
eval
,因为它非常复杂dangerous@jamylak谢谢,我将用
getattr