#python #python-3.x #inheritance #events #python-class
Вопрос:
Есть ли способ запускать ДОЧЕРНИЕ объекты в Python? Так что я имею в виду:
class A(object):
def a(self):
print("Hello from A")
# ???
class B(A)
def b(self):
print("Now in B")
и мне нужно запустить b()
функцию из класса A
, и A
только «знает», что B
класс распространяется на нее
Я хочу использовать его для событий в чем-то вроде плагинов, поэтому будут некоторые модули с классами, расширяющими основной класс, из которых я буду запускать события в плагинах
Ответ №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")
С вашим классом А вы могли бы делать такие вещи, как это:
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
Комментарии:
1. Но я хочу вызвать функцию в B внутри A, поэтому единственный способ запустить функции внутри B-это вызвать их из A
2. Но почему тогда B наследуется от A? В своем примере вы показываете, что B относится к типу A. Следовательно, следствием является вызов методов, специфичных для B, с использованием интерфейса, предоставляемого A. Не могли бы вы подробнее рассказать об этом наследстве?
3. Поэтому в вашем примере, когда я вызываю a() из класса A, он использует функцию A b (), но я хочу вызвать функцию B().
4. Я добавил небольшой пример, чтобы вы увидели, как вызывается b() из B. Это помогает?
5. Я пробовал это, но, как я уже говорил, мне нужно перейти к функции B b() из класса