在使用 python 时,令我困扰的是,虽然 obj.method() 完全没问题,但 method(obj) 是不允许的。所以我想我应该尝试编写一些代码来解决这个问题。我想出了下一个:
def globalclassfuncs(defobj):
for i in inspect.getmembers(defobj, predicate=inspect.ismethod):
def scope():
var = i[0];
setattr(sys.modules[__name__], i[0], lambda obj, *args: getattr(obj, var)(*args));
scope();
但是,这有一些奇怪的地方。当我删除def scope():
时和scope()
,这样它就可以在 for 循环中没有函数定义的情况下运行,或者当我更改 getattr()
时使用函数i[0]
直接而不是通过 var
,不知何故,所有新定义的函数都指向最后定义的函数,而不是它们应该指向的函数。为什么代码中如此小的更改会导致这种行为发生如此大的变化?
最佳答案
看起来像 late binding closure 的情况
关于python - 为什么Python的指向随着这个函数的微小改变而改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25000394/