python @abstractmethod decorator

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

31
задан Richard Hansen 20 October 2016 в 21:11
поделиться