blob: 9522dd62049138b5e809e61e0f16c7f7f3a7554c [file] [log] [blame]
Georg Brandlaeaa5462007-09-04 08:11:03 +00001:mod:`abc` --- Abstract Base Classes
2====================================
3
4.. module:: abc
5 :synopsis: Abstract base classes according to PEP 3119.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandlaeaa5462007-09-04 08:11:03 +00007.. moduleauthor:: Guido van Rossum
8.. sectionauthor:: Georg Brandl
9.. much of the content adapted from docstrings
10
Raymond Hettingeread49752011-01-24 16:28:06 +000011**Source code:** :source:`Lib/abc.py`
12
13--------------
14
Éric Araujo8ddf7c22011-06-15 17:49:20 +020015This module provides the infrastructure for defining :term:`abstract base
Andrew Svetlovb67596d2012-12-13 19:09:33 +020016classes <abstract base class>` (ABCs) in Python, as outlined in :pep:`3119`;
17see the PEP for why this was added to Python. (See also :pep:`3141` and the
18:mod:`numbers` module regarding a type hierarchy for numbers based on ABCs.)
Georg Brandlaeaa5462007-09-04 08:11:03 +000019
Mark Summerfield08898b42007-09-05 08:43:04 +000020The :mod:`collections` module has some concrete classes that derive from
21ABCs; these can, of course, be further derived. In addition the
Éric Araujo36226802011-06-03 20:49:39 +020022:mod:`collections.abc` submodule has some ABCs that can be used to test whether
Mark Summerfield08898b42007-09-05 08:43:04 +000023a class or instance provides a particular interface, for example, is it
24hashable or a mapping.
Georg Brandlaeaa5462007-09-04 08:11:03 +000025
26
Eric Appelt122e88a2017-08-30 17:47:52 -050027This module provides the metaclass :class:`ABCMeta` for defining ABCs and
28a helper class :class:`ABC` to alternatively define ABCs through inheritance:
29
30.. class:: ABC
31
32 A helper class that has :class:`ABCMeta` as its metaclass. With this class,
33 an abstract base class can be created by simply deriving from :class:`ABC`
34 avoiding sometimes confusing metaclass usage, for example::
35
36 from abc import ABC
37
38 class MyABC(ABC):
39 pass
40
41 Note that the type of :class:`ABC` is still :class:`ABCMeta`, therefore
42 inheriting from :class:`ABC` requires the usual precautions regarding
43 metaclass usage, as multiple inheritance may lead to metaclass conflicts.
44 One may also define an abstract base class by passing the metaclass
45 keyword and using :class:`ABCMeta` directly, for example::
46
47 from abc import ABCMeta
48
49 class MyABC(metaclass=ABCMeta):
50 pass
51
52 .. versionadded:: 3.4
53
Georg Brandlaeaa5462007-09-04 08:11:03 +000054
55.. class:: ABCMeta
56
57 Metaclass for defining Abstract Base Classes (ABCs).
58
59 Use this metaclass to create an ABC. An ABC can be subclassed directly, and
60 then acts as a mix-in class. You can also register unrelated concrete
61 classes (even built-in classes) and unrelated ABCs as "virtual subclasses" --
62 these and their descendants will be considered subclasses of the registering
63 ABC by the built-in :func:`issubclass` function, but the registering ABC
64 won't show up in their MRO (Method Resolution Order) nor will method
65 implementations defined by the registering ABC be callable (not even via
Mark Summerfield08898b42007-09-05 08:43:04 +000066 :func:`super`). [#]_
Georg Brandlaeaa5462007-09-04 08:11:03 +000067
68 Classes created with a metaclass of :class:`ABCMeta` have the following method:
69
70 .. method:: register(subclass)
71
Mark Summerfield08898b42007-09-05 08:43:04 +000072 Register *subclass* as a "virtual subclass" of this ABC. For
73 example::
Georg Brandlaeaa5462007-09-04 08:11:03 +000074
Eric Appelt122e88a2017-08-30 17:47:52 -050075 from abc import ABC
Mark Summerfield08898b42007-09-05 08:43:04 +000076
Eric Appelt122e88a2017-08-30 17:47:52 -050077 class MyABC(ABC):
78 pass
Mark Summerfield08898b42007-09-05 08:43:04 +000079
Eric Appelt122e88a2017-08-30 17:47:52 -050080 MyABC.register(tuple)
Mark Summerfield08898b42007-09-05 08:43:04 +000081
Eric Appelt122e88a2017-08-30 17:47:52 -050082 assert issubclass(tuple, MyABC)
83 assert isinstance((), MyABC)
Georg Brandlaeaa5462007-09-04 08:11:03 +000084
Éric Araujo6c3787c2011-02-24 18:03:10 +000085 .. versionchanged:: 3.3
86 Returns the registered subclass, to allow usage as a class decorator.
87
Łukasz Langaeadd8cf2013-05-25 18:41:50 +020088 .. versionchanged:: 3.4
89 To detect calls to :meth:`register`, you can use the
90 :func:`get_cache_token` function.
91
Georg Brandlaeaa5462007-09-04 08:11:03 +000092 You can also override this method in an abstract base class:
93
94 .. method:: __subclasshook__(subclass)
95
96 (Must be defined as a class method.)
97
98 Check whether *subclass* is considered a subclass of this ABC. This means
99 that you can customize the behavior of ``issubclass`` further without the
100 need to call :meth:`register` on every class you want to consider a
Georg Brandl2d140982007-09-04 15:45:25 +0000101 subclass of the ABC. (This class method is called from the
102 :meth:`__subclasscheck__` method of the ABC.)
Georg Brandlaeaa5462007-09-04 08:11:03 +0000103
104 This method should return ``True``, ``False`` or ``NotImplemented``. If
105 it returns ``True``, the *subclass* is considered a subclass of this ABC.
106 If it returns ``False``, the *subclass* is not considered a subclass of
107 this ABC, even if it would normally be one. If it returns
108 ``NotImplemented``, the subclass check is continued with the usual
109 mechanism.
110
Georg Brandl2d140982007-09-04 15:45:25 +0000111 .. XXX explain the "usual mechanism"
Georg Brandlaeaa5462007-09-04 08:11:03 +0000112
Georg Brandlaeaa5462007-09-04 08:11:03 +0000113
Georg Brandl2d140982007-09-04 15:45:25 +0000114 For a demonstration of these concepts, look at this example ABC definition::
Georg Brandlaeaa5462007-09-04 08:11:03 +0000115
Georg Brandl2d140982007-09-04 15:45:25 +0000116 class Foo:
117 def __getitem__(self, index):
118 ...
119 def __len__(self):
120 ...
121 def get_iterator(self):
122 return iter(self)
123
Eric Appelt122e88a2017-08-30 17:47:52 -0500124 class MyIterable(ABC):
Georg Brandlaeaa5462007-09-04 08:11:03 +0000125
126 @abstractmethod
Georg Brandlaeaa5462007-09-04 08:11:03 +0000127 def __iter__(self):
Georg Brandl2d140982007-09-04 15:45:25 +0000128 while False:
129 yield None
130
131 def get_iterator(self):
132 return self.__iter__()
Georg Brandlaeaa5462007-09-04 08:11:03 +0000133
134 @classmethod
135 def __subclasshook__(cls, C):
Georg Brandl2d140982007-09-04 15:45:25 +0000136 if cls is MyIterable:
137 if any("__iter__" in B.__dict__ for B in C.__mro__):
Georg Brandlaeaa5462007-09-04 08:11:03 +0000138 return True
139 return NotImplemented
140
Georg Brandl2d140982007-09-04 15:45:25 +0000141 MyIterable.register(Foo)
Georg Brandlaeaa5462007-09-04 08:11:03 +0000142
Georg Brandl2d140982007-09-04 15:45:25 +0000143 The ABC ``MyIterable`` defines the standard iterable method,
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300144 :meth:`~iterator.__iter__`, as an abstract method. The implementation given
145 here can still be called from subclasses. The :meth:`get_iterator` method
146 is also part of the ``MyIterable`` abstract base class, but it does not have
147 to be overridden in non-abstract derived classes.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000148
149 The :meth:`__subclasshook__` class method defined here says that any class
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300150 that has an :meth:`~iterator.__iter__` method in its
151 :attr:`~object.__dict__` (or in that of one of its base classes, accessed
152 via the :attr:`~class.__mro__` list) is considered a ``MyIterable`` too.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000153
Georg Brandl2d140982007-09-04 15:45:25 +0000154 Finally, the last line makes ``Foo`` a virtual subclass of ``MyIterable``,
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300155 even though it does not define an :meth:`~iterator.__iter__` method (it uses
156 the old-style iterable protocol, defined in terms of :meth:`__len__` and
Georg Brandl2d140982007-09-04 15:45:25 +0000157 :meth:`__getitem__`). Note that this will not make ``get_iterator``
158 available as a method of ``Foo``, so it is provided separately.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000159
160
Georg Brandl09bc6422012-12-16 13:32:33 +0100161
Andrew Svetlovb67596d2012-12-13 19:09:33 +0200162
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500163The :mod:`abc` module also provides the following decorators:
Georg Brandlaeaa5462007-09-04 08:11:03 +0000164
Éric Araujo9bc9ab52012-12-08 18:35:31 -0500165.. decorator:: abstractmethod
Georg Brandlaeaa5462007-09-04 08:11:03 +0000166
167 A decorator indicating abstract methods.
168
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500169 Using this decorator requires that the class's metaclass is :class:`ABCMeta`
170 or is derived from it. A class that has a metaclass derived from
171 :class:`ABCMeta` cannot be instantiated unless all of its abstract methods
172 and properties are overridden. The abstract methods can be called using any
173 of the normal 'super' call mechanisms. :func:`abstractmethod` may be used
174 to declare abstract methods for properties and descriptors.
Georg Brandl2d140982007-09-04 15:45:25 +0000175
176 Dynamically adding abstract methods to a class, or attempting to modify the
177 abstraction status of a method or class once it is created, are not
178 supported. The :func:`abstractmethod` only affects subclasses derived using
179 regular inheritance; "virtual subclasses" registered with the ABC's
180 :meth:`register` method are not affected.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000181
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500182 When :func:`abstractmethod` is applied in combination with other method
183 descriptors, it should be applied as the innermost decorator, as shown in
184 the following usage examples::
Georg Brandlaeaa5462007-09-04 08:11:03 +0000185
Eric Appelt122e88a2017-08-30 17:47:52 -0500186 class C(ABC):
Georg Brandlaeaa5462007-09-04 08:11:03 +0000187 @abstractmethod
188 def my_abstract_method(self, ...):
189 ...
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500190 @classmethod
191 @abstractmethod
192 def my_abstract_classmethod(cls, ...):
193 ...
194 @staticmethod
195 @abstractmethod
196 def my_abstract_staticmethod(...):
197 ...
198
199 @property
200 @abstractmethod
201 def my_abstract_property(self):
202 ...
203 @my_abstract_property.setter
204 @abstractmethod
205 def my_abstract_property(self, val):
206 ...
207
208 @abstractmethod
209 def _get_x(self):
210 ...
211 @abstractmethod
212 def _set_x(self, val):
213 ...
214 x = property(_get_x, _set_x)
215
216 In order to correctly interoperate with the abstract base class machinery,
217 the descriptor must identify itself as abstract using
218 :attr:`__isabstractmethod__`. In general, this attribute should be ``True``
219 if any of the methods used to compose the descriptor are abstract. For
220 example, Python's built-in property does the equivalent of::
221
222 class Descriptor:
223 ...
224 @property
225 def __isabstractmethod__(self):
226 return any(getattr(f, '__isabstractmethod__', False) for
227 f in (self._fget, self._fset, self._fdel))
Georg Brandlaeaa5462007-09-04 08:11:03 +0000228
Georg Brandl2d140982007-09-04 15:45:25 +0000229 .. note::
Georg Brandlaeaa5462007-09-04 08:11:03 +0000230
Benjamin Petersonad3d5c22009-02-26 03:38:59 +0000231 Unlike Java abstract methods, these abstract
Mark Summerfield08898b42007-09-05 08:43:04 +0000232 methods may have an implementation. This implementation can be
233 called via the :func:`super` mechanism from the class that
234 overrides it. This could be useful as an end-point for a
235 super-call in a framework that uses cooperative
236 multiple-inheritance.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000237
Georg Brandl2d140982007-09-04 15:45:25 +0000238
Éric Araujo9bc9ab52012-12-08 18:35:31 -0500239.. decorator:: abstractclassmethod
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000240
241 A subclass of the built-in :func:`classmethod`, indicating an abstract
242 classmethod. Otherwise it is similar to :func:`abstractmethod`.
243
Nick Coghlancea27be2012-12-08 22:56:02 +1000244 This special case is deprecated, as the :func:`classmethod` decorator
245 is now correctly identified as abstract when applied to an abstract
246 method::
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000247
Eric Appelt122e88a2017-08-30 17:47:52 -0500248 class C(ABC):
Nick Coghlancea27be2012-12-08 22:56:02 +1000249 @classmethod
250 @abstractmethod
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000251 def my_abstract_classmethod(cls, ...):
252 ...
253
Benjamin Petersonad1e0c52010-08-17 03:37:20 +0000254 .. versionadded:: 3.2
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500255 .. deprecated:: 3.3
Nick Coghlancea27be2012-12-08 22:56:02 +1000256 It is now possible to use :class:`classmethod` with
257 :func:`abstractmethod`, making this decorator redundant.
Benjamin Petersonad1e0c52010-08-17 03:37:20 +0000258
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000259
Éric Araujo9bc9ab52012-12-08 18:35:31 -0500260.. decorator:: abstractstaticmethod
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000261
262 A subclass of the built-in :func:`staticmethod`, indicating an abstract
263 staticmethod. Otherwise it is similar to :func:`abstractmethod`.
264
Nick Coghlancea27be2012-12-08 22:56:02 +1000265 This special case is deprecated, as the :func:`staticmethod` decorator
266 is now correctly identified as abstract when applied to an abstract
267 method::
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000268
Eric Appelt122e88a2017-08-30 17:47:52 -0500269 class C(ABC):
Nick Coghlancea27be2012-12-08 22:56:02 +1000270 @staticmethod
271 @abstractmethod
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000272 def my_abstract_staticmethod(...):
273 ...
274
Benjamin Petersonad1e0c52010-08-17 03:37:20 +0000275 .. versionadded:: 3.2
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500276 .. deprecated:: 3.3
Nick Coghlancea27be2012-12-08 22:56:02 +1000277 It is now possible to use :class:`staticmethod` with
278 :func:`abstractmethod`, making this decorator redundant.
Benjamin Petersonad1e0c52010-08-17 03:37:20 +0000279
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000280
Daisuke Miyakawa0e61e672017-10-12 23:39:43 +0900281.. decorator:: abstractproperty
Georg Brandl2d140982007-09-04 15:45:25 +0000282
Nick Coghlancea27be2012-12-08 22:56:02 +1000283 A subclass of the built-in :func:`property`, indicating an abstract
284 property.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000285
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500286 Using this function requires that the class's metaclass is :class:`ABCMeta`
287 or is derived from it. A class that has a metaclass derived from
288 :class:`ABCMeta` cannot be instantiated unless all of its abstract methods
289 and properties are overridden. The abstract properties can be called using
290 any of the normal 'super' call mechanisms.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000291
Nick Coghlancea27be2012-12-08 22:56:02 +1000292 This special case is deprecated, as the :func:`property` decorator
293 is now correctly identified as abstract when applied to an abstract
294 method::
Georg Brandlaeaa5462007-09-04 08:11:03 +0000295
Eric Appelt122e88a2017-08-30 17:47:52 -0500296 class C(ABC):
Nick Coghlancea27be2012-12-08 22:56:02 +1000297 @property
298 @abstractmethod
Georg Brandlaeaa5462007-09-04 08:11:03 +0000299 def my_abstract_property(self):
300 ...
301
Nick Coghlancea27be2012-12-08 22:56:02 +1000302 The above example defines a read-only property; you can also define a
303 read-write abstract property by appropriately marking one or more of the
304 underlying methods as abstract::
Georg Brandlaeaa5462007-09-04 08:11:03 +0000305
Eric Appelt122e88a2017-08-30 17:47:52 -0500306 class C(ABC):
Nick Coghlancea27be2012-12-08 22:56:02 +1000307 @property
308 def x(self):
309 ...
310
311 @x.setter
312 @abstractmethod
313 def x(self, val):
314 ...
315
316 If only some components are abstract, only those components need to be
317 updated to create a concrete property in a subclass::
318
319 class D(C):
320 @C.x.setter
321 def x(self, val):
322 ...
323
Georg Brandlaeaa5462007-09-04 08:11:03 +0000324
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500325 .. deprecated:: 3.3
Nick Coghlancea27be2012-12-08 22:56:02 +1000326 It is now possible to use :class:`property`, :meth:`property.getter`,
327 :meth:`property.setter` and :meth:`property.deleter` with
328 :func:`abstractmethod`, making this decorator redundant.
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500329
Benjamin Petersond23f8222009-04-05 19:13:16 +0000330
Łukasz Langaeadd8cf2013-05-25 18:41:50 +0200331The :mod:`abc` module also provides the following functions:
332
333.. function:: get_cache_token()
334
335 Returns the current abstract base class cache token.
336
R David Murray3edcc782013-12-24 16:13:32 -0500337 The token is an opaque object (that supports equality testing) identifying
338 the current version of the abstract base class cache for virtual subclasses.
339 The token changes with every call to :meth:`ABCMeta.register` on any ABC.
Łukasz Langaeadd8cf2013-05-25 18:41:50 +0200340
341 .. versionadded:: 3.4
342
343
Mark Summerfield08898b42007-09-05 08:43:04 +0000344.. rubric:: Footnotes
345
346.. [#] C++ programmers should note that Python's virtual base class
347 concept is not the same as C++'s.