Почему я не могу импортировать ABC, но ABCMeta импортируется правильно?

У меня есть пример кода, который использует пакет abc для python. Я установил abc на свой ноутбук с помощью pip. Маршрут к папке пакета правильно указан в PATH.

Пример кода, который я получил, делает:

'из abc импортировать ABC, abstractmethod'

Если я попытаюсь запустить его, я получаю «ImportError: невозможно импортировать имя ABC». Однако, если я попытался импортировать только «абстрактный метод», импорт работает.

Я также могу импортировать ABCMeta, но не ABC.

'из abc импортировать ABC' ‹- не работает

'из abc import ABCMeta, abstractmethod' ‹- это так

Кажется, он находится в одном пакете, и я не получал сообщений об ошибках, когда устанавливал пакет через pip. Итак, почему я могу импортировать «ABCMeta» и «abstractmethod», но не «ABC»?


person Anon    schedule 18.06.2019    source источник


Ответы (2)


Я нашел именно то, что искал здесь:

http://www.programmersought.com/article/7351237937/

По сути, в python 2.7 (это версия, которую я должен использовать по причинам босса) вместо этого вы используете ABCMeta и настраиваете свой класс на наследование от ABCMeta, например:

from abc import ABCMeta, abstractmethod                                         

class MyBase():                                                                 
    __metaclass__ = ABCMeta                                                     
    @abstractmethod                                                             
    def func(self):                                                             

Это было очень полезно для меня, и я надеюсь, что для других.

person Anon    schedule 19.06.2019
comment
Я использую Python 3.9 на Mac OS Mojave, но все же у меня возникает та же проблема, каково решение. - person indianwebdevil; 21.04.2021

abc.ABC был представлен в Python 3.4.
Поэтому вам следует использовать версия ≥ 3.4 для запуска кода.

bpo-16049: добавьте класс abc.ABC, чтобы разрешить использование наследования для создания ABC вместо более громоздкого метакласса = ABCMeta. Патч Бруно Дюпюи.

person abc    schedule 18.06.2019