如何限制基类方法只运行一次

时间:2016-03-30 22:00:29

标签: python oop

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):
    ...

awdfwd可以在不同时间实例化,或者只能实例化其中一个。现在,有没有办法限制基类方法read_spec_and_populate_db()只执行一次?

我在SO中查找并找到here。想看看是否还有其他选择。

编辑:不是我反对它。我正在寻找除了使用旗帜之外的想法。我当前的实现是在类中使用一个标志。

3 个答案:

答案 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