类定义之外的引用实例方法

时间:2016-08-09 18:49:14

标签: python function methods parameter-passing

我正在尝试将方法作为类的定义之外的参数传递。但是,由于它没有在该范围内定义,因此不起作用。这就是我想做的事情:

def applyMethod(obj, method):
    obj.method()

class MyClass():
    def myMethod(self):
        print 1

a = MyClass()    

#works as expected
a.myMethod()

#"NameError: name 'myMethod' is not defined"
applyMethod(a, myMethod)

1 个答案:

答案 0 :(得分:2)

myMethod仅在MyClass的命名空间中定义。您的代码可能如下所示:

def applyMethod(obj, method):
    method(obj)

class MyClass():
    def myMethod(self):
        print 1

a = MyClass()    

a.myMethod()

applyMethod(a, MyClass.myMethod)

现在,您从其所在的命名空间引用myMethod,并从obj.myMethod()函数调用等效的applyMethod

这就是你需要的全部 - instance.method()只是ClassName.method(instance)的语法糖,所以我只是重写了applyMethod函数,没有语法糖,即通过在原始MyClass.myMethod中,然后给它一个MyClass的实例作为其第一个参数。这就是a.myMethod()语法在后端执行的操作。