У меня есть питон абстрактный базовый класс следующим образом:Могу ли я гарантировать, что метод питон базового класса всегда вызывается
class Node(object):
"""
All concrete node classes should inherit from this
"""
__metaclass__ = ABCMeta
def __init__(self, name):
self.name = name
self.inputs = dict()
def add_input(self, key, value=None, d=None):
self.inputs[key] = (d, value)
def bind_input(self):
print "Binding inputs"
@abstractmethod
def run(self):
pass
Теперь, различные производные классы наследуют от этого класса узла и переопределить метод run
. Всегда бывает, что bind_input()
должно быть первым, что нужно вызвать в методе run
. В настоящее время для всех производных классов разработчик должен сначала позвонить self.bind_input()
. Это не огромная проблема как таковая, но из любопытства можно ли это как-то сделать из самого базового класса, который вызывается bind_input
перед выполнением дочернего объекта run
?
Должен ли быть метод абстрактным? 'def run (self): self.bind_input()' Тогда все подклассы сначала назовут base.run(), что является более интуитивным стандартом. – GantTheWanderer
Да, поскольку все дочерние классы должны иметь специфическую реализацию класса 'run'. – Luca