Python将函数附加为点符号

时间:2015-07-22 02:50:52

标签: python

def do_something(obj, func):
    obj.func()

我的问题是如何在func上致电objfuncobj的函数。这甚至可能吗?

2 个答案:

答案 0 :(得分:5)

如果funcobj的实际功能,您可以简单地调用它:

func()

一个例子:

class Klass(object):
    def say_hi(self):
        print 'hi from', self

func = Klass().say_hi
func()   # hi from <__main__.Klass object at 0x024B4D70>

否则,如果func是函数的名称(字符串),那么这将得到它并调用它:

getattr(obj, func)()

答案 1 :(得分:0)

无论如何funcobj上定义的方法,因此您可以使用func()而不是obj.func()来直接调用它,因为func本身就是{{1}根据你的问题。

我已在obj.func上执行的以下2个示例中清除了这一点。

首先我定义了一个简单的类,然后我尝试根据这个问题访问它的实例方法。

Python interactive termainal

最后

>>> # Defining class
... 
>>> class MyClass(object):
...     def __init__(self):
...         self.name = "Rishikesh Agrawani"
...         self.age = 25
...     def doStuff(self):
...         print "DETAILS:\n"
...         print "NAME: %s" % (self.name)
...         print "AGE : %d" % (self.age)
... 
>>> # Instantiation
... 
>>> obj = MyClass()
>>> func = getattr(obj, "doStuff");
>>> func()
DETAILS:

NAME: Rishikesh Agrawani
AGE : 25
>>>