Я использовал `__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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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