如何从全局类范围访问self.function

时间:2018-11-09 14:55:34

标签: python django

如何将'mouseenter'回调传递到Foo.finished中。在doSmthAsync定义中是否可以通过某种方式访问​​self。

doSmthAsync(callback=self.finished)

对于那些建议重构代码的人:我知道很多技巧来解决它。但是问题是关于import doSmthAsync from library class Foo: doJob = doSmthAsync(callback=self.finished) def finished(): pass 定义时self的可访问性。

1 个答案:

答案 0 :(得分:1)

self并不是什么神奇的东西,它只是the first argument to instance methods的命名约定,它有望成为对当前实例的引用(调用该方法的实例)。哎呀,这是一个普通的函数参数-从技术上讲是一个局部变量。

FWIW,在class语句块中,类对象本身甚至还不存在-它仅在执行class语句后创建-因此无法引用该类从类声明中。但是实际上并不需要,您可以从类语句块中直接访问finished函数(是的,我说“函数”,因为这是一个普通函数,请参见上面的链接),位于至少在定义函数后:

class Foo(object):

    def finished(self):
        pass

    print("finished : {}".format(finished)

我不知道doSmthAsync应该做什么,因此不可能为您的问题发布适当的pythonic解决方案,但是可以肯定地使用属性或自定义描述符-甚至是简单方法都可以解决它FWIW。