Python: самый чистый способ обернуть каждый метод в родительском классе в «с» - PullRequest
6 голосов
/ 22 января 2012

У меня есть родительский класс, у которого есть куча методов класса:

class Parent():

    @classmethod
    def methodA(cls):
        pass

    @classmethod
    def methodB(cls):
        pass

В моем подклассе я хотел бы заключить подмножество методов в "with". Следует добиться такого эффекта:

class Child(Parent):

    @classmethod
    def methodA(cls):
        with db.transaction:
            super(Child, cls).methodA()

У меня есть куча методов, которые следуют этой схеме и предпочли бы не повторяться. Есть ли более чистый способ сделать это?

1 Ответ

3 голосов
/ 22 января 2012

Кажется, вам следует переместить транзакцию с db.transaction в базу. Сделай метод в базе, вернув db.transaction

@staticmethod
def gettransaction(): return db.transaction

тогда вы перегрузите его в дочерних файлах, как / при необходимости.

В базу вы затем делаете

  def methodB(cls):
    with cls.gettransaction():
       bla ...

Вот полный рабочий пример с фиктивной транзакцией

* * 1010

это приводит к

enter
A
exit
enter2
A
exit2
...