Почему я не могу импортировать ABC, но ABCMeta правильно импортирован? - PullRequest
0 голосов
/ 19 июня 2019

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

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

'от abc import ABC, абстрактный метод'

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

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

'из abc import ABC' <- не работает </p>

'из abc import ABCMeta, abstractmethod' <- это делает </p>

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

Ответы [ 2 ]

1 голос
/ 19 июня 2019

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

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

0 голосов
/ 19 июня 2019

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

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

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

from abc import ABCMeta, abstractmethod                                         

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

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

...