我正在尝试将方法作为类的定义之外的参数传递。但是,由于它没有在该范围内定义,因此不起作用。这就是我想做的事情:
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)
答案 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()
语法在后端执行的操作。