我打算创建一个类,它包含对另一个类方法的引用。我希望能够调用该方法。这基本上是一种进行回调的方法。在
我的代码一直工作到我试图访问一个类变量。当我运行下面的代码时,我得到一个错误:我做错了什么?在
布莱恩
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中的一类对象。你可以把它们传来传去,像其他任何东西一样叫它们。挖掘方法的实例变量是几乎永远不应该做的事情。实现目标的一个简单示例是:
在您的代码中调用
self.method.im_func(self.method)
-您不应该将方法作为参数传递,而应该传递该方法来自的对象。一、 e.应该是self.method.im_func(self.method.im_self, *self.args)
为什么不使用这个:
而不是这样:
^{pr2}$相关问题 更多 >
编程相关推荐