pythonic方式调用多个回调

时间:2018-05-14 19:38:05

标签: python python-2.x

子类构造函数有一个param,它将回调函数作为参数。我想在我的子类构造函数中为回调插入另一个自定义函数,以便我可以调用多个回调。有没有一种简单的方法可以在不修改回调的情况下执行此操作,或者通过Base类中的所有回调将一些特殊代码写入循环。

class Base:
    def __init__(callback=None):
       if callback: callback()

class Subclass(Base):
    def __init__(callback=None):
       def another_callback(...):
           print "another_callback"

       super(Base, self).__init__(callback)

使用示例:

def a_callback(...):
   print "a_callback"

x = Subclass(callback=a_callback)

上面应该打印(顺序并不重要) " a_callback" " another_callback"

2 个答案:

答案 0 :(得分:0)

我认为这段代码符合您的要求。

我必须修改原始代码,以便:

  • 它编译
  • 子类继承自Base
  • 这是python 3代码,因为那是我必须提供的版本
class Base:
    def __init__(self, callback=None):
        if callback: callback()

class Subclass(Base):
    def __init__(self, callback=None):
        def another_callback():
            if callback: callback()
            print("another_callback")

        super().__init__(another_callback)

def a_callback():
    print("a_callback")

def b_callback():
    print("b_callback")

x = Subclass(callback=a_callback)
y = Subclass(callback=b_callback)

输出:

a_callback
another_callback
b_callback
another_callback

输出显示Subclass的每个实例都可以调用任何给定的回调以及构造函数中的本地函数。

答案 1 :(得分:0)

在调用超类'__init__()之前,只需在子类'__init__() 中调用它 - 只要基类是“,它就可以在Python 2和3中运行” new-style“(直接或间接地将object作为其基类之一... Python 3.x中的默认值。

class Base(object):
    def __init__(self, callback=None):
       if callback: callback()


class Subclass(Base):
    def __init__(self, callback=None):
        def another_callback():
           print('another_callback')

        another_callback()  # Just call it.
        super(Subclass, self).__init__(callback)


def a_callback():
   print('a_callback')

x = Subclass(callback=a_callback)

输出:

another_callback
a_callback