【问题标题】:Python append function as dot notationPython append 函数作为点表示法
【发布时间】:2015-10-11 17:35:12
【问题描述】:
def do_something(obj, func):
    obj.func()

我的问题是如何在obj 上调用funcfuncobj 的函数。这甚至可能吗?

【问题讨论】:

标签: python


【解决方案1】:

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

我已经在Python interactive termainal 上执行的以下 2 个示例中清除了这一点。

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

>>> # 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
>>> 

终于

>>> def do_something(obj, func):
...     obj.func()
... 
>>> do_something(obj, func)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in do_something
AttributeError: 'MyClass' object has no attribute 'func'
>>> 
>>> def do_something(obj, func):
...     print obj, func
... 
>>> do_something(obj, func)
<__main__.MyClass object at 0x100686450> <bound method MyClass.doStuff of <__main__.MyClass object at 0x100686450>>
>>> 
>>> 
>>> def do_something(obj, func):
...     func()
... 
>>> do_something(obj, func)
DETAILS:

NAME: Rishikesh Agrawani
AGE : 25
>>> 

【讨论】:

    【解决方案2】:

    如果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)()
    

    【讨论】:

      猜你喜欢
      • 2021-03-04
      • 1970-01-01
      • 2018-12-06
      • 2012-02-18
      • 1970-01-01
      • 2012-08-11
      • 2016-09-27
      • 1970-01-01
      • 2021-01-02
      相关资源
      最近更新 更多