python - 在 Python 中调用另一个类的方法

标签 python

我想创建一个包含对另一个类方法的引用的类。我希望能够调用该方法。它基本上是一种进行回调的方法。

在我尝试访问类变量之前,我的代码一直有效。当我运行下面的代码时,我收到错误我做错了什么?

布莱恩

import logging

class yRunMethod(object):
    """
    container that allows method to be called when method run is called 
    """

    def __init__(self, method, *args):
        """
        init
        """

        self.logger = logging.getLogger('yRunMethod')
        self.logger.debug('method <%s> and args <%s>'%(method, args))

        self.method = method
        self.args   = args

    def run(self):
    """
    runs the method
    """

        self.logger.debug('running with <%s> and <%s>'%(self.method,self.args))

        #if have args sent to function
        if self.args:
            self.method.im_func(self.method, *self.args)

        else:
            self.method.im_func(self.method)

if __name__ == "__main__":  
    import sys

    #create test class
    class testClass(object):
        """
        test class 
        """

        def __init__(self):
            """
            init
            """

            self.var = 'some var'

        def doSomthing(self):
            """

            """

            print 'do somthing called'
            print 'self.var <%s>'%self.var

    #test yRunMethod
    met1 = testClass().doSomthing
    run1 = yRunMethod(met1)
    run1.run()

最佳答案

我认为您让这种方式对自己太苛刻了(这很容易做到 ;-)。类和实例的方法是 Python 中的一流对象。你可以传递它们并像其他任何东西一样调用它们。深入研究方法的实例变量是几乎不应该做的事情。实现您的目标的一个简单示例是:

class Wrapper (object):
    def __init__(self, meth, *args):
        self.meth = meth
        self.args = args

   def runit(self):
       self.meth(*self.args)

class Test (object):
    def __init__(self, var):
        self.var = var
    def sayHello(self):
        print "Hello! My name is: %s" % self.var

t = Test('FooBar')
w = Wrapper( t.sayHello )

w.runit()

关于python - 在 Python 中调用另一个类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2976840/

相关文章:

python - Discord.py计算器: Multiple Values?

python - 使用 Apache Beam Python `WriteToFiles` 转换为每个窗口只写入一个文件

python - 如何使用 Python 减去数据框中每对行的日期并将其保存在 Excel 中

python - 使用 boost build 链接到 boost 单元测试框架

python - 如何模拟/修补整个类(class)?

javascript - 在 AngularJS 中选择一个输入字段时如何禁用一个输入字段? (都使用相同的 ng-model)

python - 用可能的多个单词匹配州和城市

python - 骨架目录的目的

python - 用python计算电影文件中的音轨

python - 如何循环遍历字符串列表以在条件中使用它们?