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