【问题标题】:Python events & triggersPython 事件和触发器
【发布时间】:2021-09-07 22:35:46
【问题描述】:

有没有办法在 Python 中触发 CHILD 对象?所以我的意思是:

class A(object):
  def a(self):
    print("Hello from A")
    # ???

class B(A)
  def b(self):
    print("Now in B")

我需要从A 类触发b() 函数,而A 只“知道”B 类扩展到它

我想在插件之类的事件中使用它,所以会有一些带有扩展主类的类的模块,我将从这些模块中触发插件中的事件

【问题讨论】:

    标签: python python-3.x inheritance events python-class


    【解决方案1】:

    您可以将抽象插件类型定义为可以调用函数的接口:

    class AbstractPlugin(object):
      def trigger(self):
        pass
    
    class APlugin(AbstractPlugin):
      def trigger(self):
        print("This is plugin A")
    
    class BPlugin(AbstractPlugin):
      def trigger(self):
        print("This is plugin B")
    

    对于你的 A 类,你可以做这样的事情:

    class A(object):
      def a(self, plugin: AbstractPlugin):
        print("Hello from A")
        plugin.trigger()
    
    master = A()
    plugin_a = APlugin()
    plugin_b = BPlugin()
    
    master.a(plugin_a)
    master.a(plugin_b)
    

    这将导致:

    Hello from A
    This is plugin A
    Hello from A
    This is plugin B
    

    【讨论】:

    • 但是我想在 A 中调用 B 中的函数,所以我在 B 中运行函数的唯一方法是从 A 中调用它们
    • 但是为什么B继承自A呢?您在示例中显示的是 B 属于 A 类型。因此,使用 A 提供的接口调用特定于 B 的方法是结果。你能详细说明一下这个继承吗?
    • 所以在你的例子中,当我从 A 类调用 a() 时,它使用 A 的函数 b(),但我想调用 B 的函数 b()。
    • 我添加了一个小示例供您查看,如何调用 B 中的 b()。这有帮助吗?
    • 我试过了,但是,我之前说过,我需要从A类去B的函数b()
    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    相关资源
    最近更新 更多