Абстрактные базовые классы все еще могут быть полезны в 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 становится немного громоздкой и немного уродливой. Есть ли более элегантный способ создания подклассов из абстрактных базовых классов? Я просто делаю это Неправильно?