Skip to main content

abc

abc provides the machinery for abstract base classes (PEP 3119). Classes can declare abstract methods, register virtual subclasses, and hook into isinstance / issubclass without inheritance.

Source-of-record: Lib/abc.py, Modules/_abc.c, abc docs.

Metaclass

class MyABC(metaclass=ABCMeta): ...

ABCMeta records abstract methods, manages the virtual-subclass registry, and dispatches __subclasshook__ during issubclass.

ABC is a helper base class equivalent to setting metaclass=ABCMeta.

Decorators

DecoratorEffect
@abstractmethodMark a method abstract.
@abstractclassmethod (deprecated)Use @classmethod + @abstractmethod.
@abstractstaticmethod (deprecated)Use @staticmethod + @abstractmethod.
@abstractproperty (deprecated)Use @property + @abstractmethod.

An abstract class records its abstract methods in __abstractmethods__ (frozenset). Instantiating a class with non-empty __abstractmethods__ raises TypeError.

Registry

MethodEffect
ABCMeta.register(subclass)Mark subclass as a virtual child of the ABC.
ABCMeta.__subclasshook__(cls)Custom hook for issubclass (return True / False / NotImplemented).

Caching: each issubclass/isinstance result is cached. The cache invalidates when a new class is registered or a new subclass is created. abc.get_cache_token() returns a token that changes on each invalidation.

Helpers

FunctionReturns
abc.get_cache_token()Current cache token.
abc.update_abstractmethods(cls)Recompute __abstractmethods__ after mutation.

Gopy status

AreaState
ABCMeta / ABCComplete.
@abstractmethodComplete.
register, __subclasshook__Complete.
Caching and get_cache_tokenComplete.

Reference

  • CPython 3.14: abc.
  • Lib/abc.py, Modules/_abc.c.
  • module/_abc/. gopy port.
  • PEP 3119.