Я использовал `__metaclass__`, чтобы настроить `abc.ABCMeta` в качестве метакласса, но нереализованный `@abstractmethod` ⇐ Python

Программы на Python
Anonymous
Я использовал `__metaclass__`, чтобы настроить `abc.ABCMeta` в качестве метакласса, но нереализованный `@abstractmethod`

Сообщение Anonymous »

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

Подробнее здесь: https://stackoverflow.com/questions/719 ... nimplement

Вернуться в «Python»