Я прочитал документы python об абстрактных базовых классах:
От здесь:
abc.abstractmethod(function)
Декоратор, показывающий абстрактные методы.Использование этого декоратора требует, чтобы метакласс класса был
ABCMeta
или вытекает из него. Класс, имеющий метакласс, полученный изABCMeta
не могут быть созданы, если все его абстрактные методы и свойства переопределены.
И здесь
Вы можете применить декоратор
@abstractmethod
к таким методам, как draw() которые должны быть реализованы; Затем Python создает исключение для классы, которые не определяют метод. Обратите внимание, что исключение когда вы на самом деле пытаетесь создать экземпляр подкласса Отсутствует метод.
Я использовал этот код, чтобы проверить это:
import abc
class AbstractClass(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def abstractMethod(self):
return
class ConcreteClass(AbstractClass):
def __init__(self):
self.me = "me"
c = ConcreteClass()
c.abstractMethod()
Код идет хорошо, поэтому я его не понимаю. Если я наберу c.abstractMethod
, я получаю:
<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>
Что мне здесь не хватает? ConcreteClass
должен реализовывать абстрактные методы, но я не получаю исключения.