使用像 function/method 和 () 这样的变量的代码?

Code using a variable like a function/method with ()?

我正在查看一个现有的代码库,它像方法一样使用 bool 变量,例如:

class Manager(object):

    def __init__(self):
        self._on_elect_callback = None
        self._on_revoke_callback = None
        self.... = ... (..., event_listener = self._event)

    def _event(self, type):
        on_elect_callback = self._on_elect_callback
        if type == SOME_CONSTANT:
            ....
            if on_elect_callback:
                on_elect_callback()

    def do_this(self, on_elect_function):
        self._on_elect_callback = on_elect_function
        if self....:
            on_elect_function()

问题:

  1. 我很好奇 on_elect_callback 是如何像在最后一行的 if 条件之后带有 () 的函数一样使用的。那不是一些布尔变量吗?我搜索了回购协议,没有定义。它在做什么?

  2. 此外,我想在 __init__ 中设置一个变量,事件的回调函数可以使用,例如“嘿,这个事件类型是 SOME_CONSTANT,所以设置变量在__init__"ABCD"(或True)中,如何实现呢?上面代码中的方法是否可以做到?

self._on_elect_callback 可能会被分配到 self._on_elect_callback = lambda: "I'm a function" 中的功能。我认为您认为它是一个变量的原因是因为它在 if 表达式中使用。原因是,如果 self._on_elect_callback 被分配一个函数,表达式将计算为 True,因为函数支持方法 bool,默认情况下 returns True。 关于 Q2,当然可以,函数是 python 中的对象,因此您可以将它们传递给高阶函数,或者将它们分配为变量,如示例

class Manager(object):

    def __init__(self, function):
        self._on_elect_callback = function # here we assigned the given function
        if not function: 
            # here we define a default attribute using an anonymous function
            self._on_elect_callback = lambda: "Default Function"

    def _event(self, type):
        if self._on_elect_callback:
            self._on_elect_callback()