我有一个python抽象基类,如下所示:
basesave()
现在,各种派生类将从此节点类继承并覆盖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
吗?
答案 0 :(得分:4)
通常面向对象的方法是:
def run(self):
self.bind_input()
return self.do_run()
@abstractmethod
def do_run(self):
pass # override this method
让您的子类覆盖内部方法,而不是外部方法。