Python Glossary English

все Python 3abcпонятие

abc.ABCMeta

абстрактные классы

Метакласс для определения абстрактных базовых классов; ABC — удобная обёртка над ним.

Синтаксис

class C(metaclass=abc.ABCMeta): ...

Прямо к метаклассу обращаются, когда наследоваться от ABC нельзя: у класса уже есть свой метакласс, и его делают наследником ABCMeta. Вторая причина — метод register(): чужой класс объявляется виртуальным подклассом, после чего isinstance и issubclass отвечают True, но ничего не наследуется и абстрактные методы у него никто не проверяет.

Примеры

import abc
print(type(abc.ABC) is abc.ABCMeta)   # → True
import abc
class Shape(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def area(self): return 0
print(type(Shape) is abc.ABCMeta)     # → True
print(Shape.__abstractmethods__)      # → frozenset({'area'})
class Circle(Shape): area = lambda self: 3.14
print(Circle().area())                # → 3.14
print(Shape())                        # → TypeError

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности