Python super (), абстрактные базовые классы и NotImplementedError

Абстрактные базовые классы все еще могут быть полезны в Python. При написании абстрактного базового класса, где я хочу, чтобы каждый подкласс имел, скажем, метод spam () , я хочу написать что-то вроде этого:

class Abstract(object):
    def spam(self):
        raise NotImplementedError

Проблема также заключается в том, чтобы использовать super () , и чтобы сделать это правильно, включив его во всю цепочку подклассов. В этом случае кажется, что мне нужно обернуть каждый вызов super следующим образом:

class Useful(Abstract):
    def spam(self):
        try:
            super(Useful, self).spam()
        except NotImplementedError, e:
            pass
        print("It's okay.")

Это нормально для простого подкласса, но при написании класса, который имеет много методов, функция try-except становится немного громоздкой и немного уродливой. Есть ли более элегантный способ создания подклассов из абстрактных базовых классов? Я просто делаю это Неправильно?

5
задан Community 23 May 2017 в 12:31
поделиться