class car(object):
def read_spec_and_populate_db():
spec = read_from_file(spec.yaml)
populate_db(spec)
class awd(car):
super(awd, self).read_spec_and_populate_db()
def foo(self):
...
class fwd(car):
super(fwd, self).read_spec_and_populate_db()
def bar(self):
...
类awd
和fwd
可以在不同时间实例化,或者只能实例化其中一个。现在,有没有办法限制基类方法read_spec_and_populate_db()只执行一次?
我在SO中查找并找到here。想看看是否还有其他选择。
编辑:不是我反对它。我正在寻找除了使用旗帜之外的想法。我当前的实现是在类中使用一个标志。
答案 0 :(得分:2)
只需使用标志:
QAbstractItemModel
现在,您可以多次拨打class car(object):
db_read = False
def read_spec_and_populate_db():
if not car.db_read:
spec = read_from_file(spec.yaml)
populate_db(spec)
car.db_read = True
想。它只工作一次。
答案 1 :(得分:0)
您可以使用布尔类属性标志来跟踪方法是否已经运行,如下所示:
class Car(object):
_populated_db = False
def read_spec_and_populate_db(self):
if not self._populated_db:
spec = read_from_file(spec.yaml)
populate_db(spec)
self._populated_db = True
答案 2 :(得分:-1)
一个想法可能是重新分配名称read_spec_and_populate_db
,作为执行的最后一步,指向具有相同签名但什么都不做的方法
class car(object):
def _dummy(self):
pass
def read_spec_and_populate_db(self):
spec = read_from_file(spec.yaml)
populate_db(spec)
self.read_spec_and_populate_db = self._dummy