Я читал документацию 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
, я получу:
>
Что мне здесь не хватает? ConcreteClass
должен реализовывать абстрактные методы, но я не получаю исключения.