blob: 7a73704bf682f8e8cafee1af6f00177c041b9997 [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.
6.. moduleauthor:: Guido van Rossum
7.. sectionauthor:: Georg Brandl
8.. much of the content adapted from docstrings
9
Raymond Hettingeread49752011-01-24 16:28:06 +000010**Source code:** :source:`Lib/abc.py`
11
12--------------
13
Éric Araujo8ddf7c22011-06-15 17:49:20 +020014This module provides the infrastructure for defining :term:`abstract base
Andrew Svetlovb67596d2012-12-13 19:09:33 +020015classes <abstract base class>` (ABCs) in Python, as outlined in :pep:`3119`;
16see the PEP for why this was added to Python. (See also :pep:`3141` and the
17:mod:`numbers` module regarding a type hierarchy for numbers based on ABCs.)
Georg Brandlaeaa5462007-09-04 08:11:03 +000018
Mark Summerfield08898b42007-09-05 08:43:04 +000019The :mod:`collections` module has some concrete classes that derive from
20ABCs; these can, of course, be further derived. In addition the
Éric Araujo36226802011-06-03 20:49:39 +020021:mod:`collections.abc` submodule has some ABCs that can be used to test whether
Mark Summerfield08898b42007-09-05 08:43:04 +000022a class or instance provides a particular interface, for example, is it
23hashable or a mapping.
Georg Brandlaeaa5462007-09-04 08:11:03 +000024
25
Andrew Svetlovb67596d2012-12-13 19:09:33 +020026This module provides the following classes:
Georg Brandlaeaa5462007-09-04 08:11:03 +000027
28.. class:: ABCMeta
29
30 Metaclass for defining Abstract Base Classes (ABCs).
31
32 Use this metaclass to create an ABC. An ABC can be subclassed directly, and
33 then acts as a mix-in class. You can also register unrelated concrete
34 classes (even built-in classes) and unrelated ABCs as "virtual subclasses" --
35 these and their descendants will be considered subclasses of the registering
36 ABC by the built-in :func:`issubclass` function, but the registering ABC
37 won't show up in their MRO (Method Resolution Order) nor will method
38 implementations defined by the registering ABC be callable (not even via
Mark Summerfield08898b42007-09-05 08:43:04 +000039 :func:`super`). [#]_
Georg Brandlaeaa5462007-09-04 08:11:03 +000040
41 Classes created with a metaclass of :class:`ABCMeta` have the following method:
42
43 .. method:: register(subclass)
44
Mark Summerfield08898b42007-09-05 08:43:04 +000045 Register *subclass* as a "virtual subclass" of this ABC. For
46 example::
Georg Brandlaeaa5462007-09-04 08:11:03 +000047
Georg Brandla1c6a1c2009-01-03 21:26:05 +000048 from abc import ABCMeta
Mark Summerfield08898b42007-09-05 08:43:04 +000049
Georg Brandla1c6a1c2009-01-03 21:26:05 +000050 class MyABC(metaclass=ABCMeta):
51 pass
Mark Summerfield08898b42007-09-05 08:43:04 +000052
Georg Brandla1c6a1c2009-01-03 21:26:05 +000053 MyABC.register(tuple)
Mark Summerfield08898b42007-09-05 08:43:04 +000054
Georg Brandla1c6a1c2009-01-03 21:26:05 +000055 assert issubclass(tuple, MyABC)
56 assert isinstance((), MyABC)
Georg Brandlaeaa5462007-09-04 08:11:03 +000057
Éric Araujo6c3787c2011-02-24 18:03:10 +000058 .. versionchanged:: 3.3
59 Returns the registered subclass, to allow usage as a class decorator.
60
Łukasz Langaeadd8cf2013-05-25 18:41:50 +020061 .. versionchanged:: 3.4
62 To detect calls to :meth:`register`, you can use the
63 :func:`get_cache_token` function.
64
Georg Brandlaeaa5462007-09-04 08:11:03 +000065 You can also override this method in an abstract base class:
66
67 .. method:: __subclasshook__(subclass)
68
69 (Must be defined as a class method.)
70
71 Check whether *subclass* is considered a subclass of this ABC. This means
72 that you can customize the behavior of ``issubclass`` further without the
73 need to call :meth:`register` on every class you want to consider a
Georg Brandl2d140982007-09-04 15:45:25 +000074 subclass of the ABC. (This class method is called from the
75 :meth:`__subclasscheck__` method of the ABC.)
Georg Brandlaeaa5462007-09-04 08:11:03 +000076
77 This method should return ``True``, ``False`` or ``NotImplemented``. If
78 it returns ``True``, the *subclass* is considered a subclass of this ABC.
79 If it returns ``False``, the *subclass* is not considered a subclass of
80 this ABC, even if it would normally be one. If it returns
81 ``NotImplemented``, the subclass check is continued with the usual
82 mechanism.
83
Georg Brandl2d140982007-09-04 15:45:25 +000084 .. XXX explain the "usual mechanism"
Georg Brandlaeaa5462007-09-04 08:11:03 +000085
Georg Brandlaeaa5462007-09-04 08:11:03 +000086
Georg Brandl2d140982007-09-04 15:45:25 +000087 For a demonstration of these concepts, look at this example ABC definition::
Georg Brandlaeaa5462007-09-04 08:11:03 +000088
Georg Brandl2d140982007-09-04 15:45:25 +000089 class Foo:
90 def __getitem__(self, index):
91 ...
92 def __len__(self):
93 ...
94 def get_iterator(self):
95 return iter(self)
96
97 class MyIterable(metaclass=ABCMeta):
Georg Brandlaeaa5462007-09-04 08:11:03 +000098
99 @abstractmethod
Georg Brandlaeaa5462007-09-04 08:11:03 +0000100 def __iter__(self):
Georg Brandl2d140982007-09-04 15:45:25 +0000101 while False:
102 yield None
103
104 def get_iterator(self):
105 return self.__iter__()
Georg Brandlaeaa5462007-09-04 08:11:03 +0000106
107 @classmethod
108 def __subclasshook__(cls, C):
Georg Brandl2d140982007-09-04 15:45:25 +0000109 if cls is MyIterable:
110 if any("__iter__" in B.__dict__ for B in C.__mro__):
Georg Brandlaeaa5462007-09-04 08:11:03 +0000111 return True
112 return NotImplemented
113
Georg Brandl2d140982007-09-04 15:45:25 +0000114 MyIterable.register(Foo)
Georg Brandlaeaa5462007-09-04 08:11:03 +0000115
Georg Brandl2d140982007-09-04 15:45:25 +0000116 The ABC ``MyIterable`` defines the standard iterable method,
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300117 :meth:`~iterator.__iter__`, as an abstract method. The implementation given
118 here can still be called from subclasses. The :meth:`get_iterator` method
119 is also part of the ``MyIterable`` abstract base class, but it does not have
120 to be overridden in non-abstract derived classes.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000121
122 The :meth:`__subclasshook__` class method defined here says that any class
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300123 that has an :meth:`~iterator.__iter__` method in its
124 :attr:`~object.__dict__` (or in that of one of its base classes, accessed
125 via the :attr:`~class.__mro__` list) is considered a ``MyIterable`` too.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000126
Georg Brandl2d140982007-09-04 15:45:25 +0000127 Finally, the last line makes ``Foo`` a virtual subclass of ``MyIterable``,
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300128 even though it does not define an :meth:`~iterator.__iter__` method (it uses
129 the old-style iterable protocol, defined in terms of :meth:`__len__` and
Georg Brandl2d140982007-09-04 15:45:25 +0000130 :meth:`__getitem__`). Note that this will not make ``get_iterator``
131 available as a method of ``Foo``, so it is provided separately.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000132
133
Andrew Svetlovb67596d2012-12-13 19:09:33 +0200134.. class:: ABC
135
Georg Brandl09bc6422012-12-16 13:32:33 +0100136 A helper class that has :class:`ABCMeta` as its metaclass. With this class,
137 an abstract base class can be created by simply deriving from :class:`ABC`,
Andrew Svetlovb67596d2012-12-13 19:09:33 +0200138 avoiding sometimes confusing metaclass usage.
139
Georg Brandl09bc6422012-12-16 13:32:33 +0100140 Note that the type of :class:`ABC` is still :class:`ABCMeta`, therefore
141 inheriting from :class:`ABC` requires the usual precautions regarding metaclass
142 usage, as multiple inheritance may lead to metaclass conflicts.
143
144 .. versionadded:: 3.4
145
Andrew Svetlovb67596d2012-12-13 19:09:33 +0200146
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500147The :mod:`abc` module also provides the following decorators:
Georg Brandlaeaa5462007-09-04 08:11:03 +0000148
Éric Araujo9bc9ab52012-12-08 18:35:31 -0500149.. decorator:: abstractmethod
Georg Brandlaeaa5462007-09-04 08:11:03 +0000150
151 A decorator indicating abstract methods.
152
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500153 Using this decorator requires that the class's metaclass is :class:`ABCMeta`
154 or is derived from it. A class that has a metaclass derived from
155 :class:`ABCMeta` cannot be instantiated unless all of its abstract methods
156 and properties are overridden. The abstract methods can be called using any
157 of the normal 'super' call mechanisms. :func:`abstractmethod` may be used
158 to declare abstract methods for properties and descriptors.
Georg Brandl2d140982007-09-04 15:45:25 +0000159
160 Dynamically adding abstract methods to a class, or attempting to modify the
161 abstraction status of a method or class once it is created, are not
162 supported. The :func:`abstractmethod` only affects subclasses derived using
163 regular inheritance; "virtual subclasses" registered with the ABC's
164 :meth:`register` method are not affected.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000165
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500166 When :func:`abstractmethod` is applied in combination with other method
167 descriptors, it should be applied as the innermost decorator, as shown in
168 the following usage examples::
Georg Brandlaeaa5462007-09-04 08:11:03 +0000169
170 class C(metaclass=ABCMeta):
171 @abstractmethod
172 def my_abstract_method(self, ...):
173 ...
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500174 @classmethod
175 @abstractmethod
176 def my_abstract_classmethod(cls, ...):
177 ...
178 @staticmethod
179 @abstractmethod
180 def my_abstract_staticmethod(...):
181 ...
182
183 @property
184 @abstractmethod
185 def my_abstract_property(self):
186 ...
187 @my_abstract_property.setter
188 @abstractmethod
189 def my_abstract_property(self, val):
190 ...
191
192 @abstractmethod
193 def _get_x(self):
194 ...
195 @abstractmethod
196 def _set_x(self, val):
197 ...
198 x = property(_get_x, _set_x)
199
200 In order to correctly interoperate with the abstract base class machinery,
201 the descriptor must identify itself as abstract using
202 :attr:`__isabstractmethod__`. In general, this attribute should be ``True``
203 if any of the methods used to compose the descriptor are abstract. For
204 example, Python's built-in property does the equivalent of::
205
206 class Descriptor:
207 ...
208 @property
209 def __isabstractmethod__(self):
210 return any(getattr(f, '__isabstractmethod__', False) for
211 f in (self._fget, self._fset, self._fdel))
Georg Brandlaeaa5462007-09-04 08:11:03 +0000212
Georg Brandl2d140982007-09-04 15:45:25 +0000213 .. note::
Georg Brandlaeaa5462007-09-04 08:11:03 +0000214
Benjamin Petersonad3d5c22009-02-26 03:38:59 +0000215 Unlike Java abstract methods, these abstract
Mark Summerfield08898b42007-09-05 08:43:04 +0000216 methods may have an implementation. This implementation can be
217 called via the :func:`super` mechanism from the class that
218 overrides it. This could be useful as an end-point for a
219 super-call in a framework that uses cooperative
220 multiple-inheritance.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000221
Georg Brandl2d140982007-09-04 15:45:25 +0000222
Éric Araujo9bc9ab52012-12-08 18:35:31 -0500223.. decorator:: abstractclassmethod
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000224
225 A subclass of the built-in :func:`classmethod`, indicating an abstract
226 classmethod. Otherwise it is similar to :func:`abstractmethod`.
227
Nick Coghlancea27be2012-12-08 22:56:02 +1000228 This special case is deprecated, as the :func:`classmethod` decorator
229 is now correctly identified as abstract when applied to an abstract
230 method::
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000231
232 class C(metaclass=ABCMeta):
Nick Coghlancea27be2012-12-08 22:56:02 +1000233 @classmethod
234 @abstractmethod
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000235 def my_abstract_classmethod(cls, ...):
236 ...
237
Benjamin Petersonad1e0c52010-08-17 03:37:20 +0000238 .. versionadded:: 3.2
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500239 .. deprecated:: 3.3
Nick Coghlancea27be2012-12-08 22:56:02 +1000240 It is now possible to use :class:`classmethod` with
241 :func:`abstractmethod`, making this decorator redundant.
Benjamin Petersonad1e0c52010-08-17 03:37:20 +0000242
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000243
Éric Araujo9bc9ab52012-12-08 18:35:31 -0500244.. decorator:: abstractstaticmethod
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000245
246 A subclass of the built-in :func:`staticmethod`, indicating an abstract
247 staticmethod. Otherwise it is similar to :func:`abstractmethod`.
248
Nick Coghlancea27be2012-12-08 22:56:02 +1000249 This special case is deprecated, as the :func:`staticmethod` decorator
250 is now correctly identified as abstract when applied to an abstract
251 method::
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000252
253 class C(metaclass=ABCMeta):
Nick Coghlancea27be2012-12-08 22:56:02 +1000254 @staticmethod
255 @abstractmethod
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000256 def my_abstract_staticmethod(...):
257 ...
258
Benjamin Petersonad1e0c52010-08-17 03:37:20 +0000259 .. versionadded:: 3.2
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500260 .. deprecated:: 3.3
Nick Coghlancea27be2012-12-08 22:56:02 +1000261 It is now possible to use :class:`staticmethod` with
262 :func:`abstractmethod`, making this decorator redundant.
Benjamin Petersonad1e0c52010-08-17 03:37:20 +0000263
Benjamin Peterson45c257f2010-08-17 00:52:52 +0000264
Éric Araujo87552782011-08-19 03:53:51 +0200265.. decorator:: abstractproperty(fget=None, fset=None, fdel=None, doc=None)
Georg Brandl2d140982007-09-04 15:45:25 +0000266
Nick Coghlancea27be2012-12-08 22:56:02 +1000267 A subclass of the built-in :func:`property`, indicating an abstract
268 property.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000269
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500270 Using this function requires that the class's metaclass is :class:`ABCMeta`
271 or is derived from it. A class that has a metaclass derived from
272 :class:`ABCMeta` cannot be instantiated unless all of its abstract methods
273 and properties are overridden. The abstract properties can be called using
274 any of the normal 'super' call mechanisms.
Georg Brandlaeaa5462007-09-04 08:11:03 +0000275
Nick Coghlancea27be2012-12-08 22:56:02 +1000276 This special case is deprecated, as the :func:`property` decorator
277 is now correctly identified as abstract when applied to an abstract
278 method::
Georg Brandlaeaa5462007-09-04 08:11:03 +0000279
280 class C(metaclass=ABCMeta):
Nick Coghlancea27be2012-12-08 22:56:02 +1000281 @property
282 @abstractmethod
Georg Brandlaeaa5462007-09-04 08:11:03 +0000283 def my_abstract_property(self):
284 ...
285
Nick Coghlancea27be2012-12-08 22:56:02 +1000286 The above example defines a read-only property; you can also define a
287 read-write abstract property by appropriately marking one or more of the
288 underlying methods as abstract::
Georg Brandlaeaa5462007-09-04 08:11:03 +0000289
290 class C(metaclass=ABCMeta):
Nick Coghlancea27be2012-12-08 22:56:02 +1000291 @property
292 def x(self):
293 ...
294
295 @x.setter
296 @abstractmethod
297 def x(self, val):
298 ...
299
300 If only some components are abstract, only those components need to be
301 updated to create a concrete property in a subclass::
302
303 class D(C):
304 @C.x.setter
305 def x(self, val):
306 ...
307
Georg Brandlaeaa5462007-09-04 08:11:03 +0000308
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500309 .. deprecated:: 3.3
Nick Coghlancea27be2012-12-08 22:56:02 +1000310 It is now possible to use :class:`property`, :meth:`property.getter`,
311 :meth:`property.setter` and :meth:`property.deleter` with
312 :func:`abstractmethod`, making this decorator redundant.
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500313
Benjamin Petersond23f8222009-04-05 19:13:16 +0000314
Łukasz Langaeadd8cf2013-05-25 18:41:50 +0200315The :mod:`abc` module also provides the following functions:
316
317.. function:: get_cache_token()
318
319 Returns the current abstract base class cache token.
320
R David Murray3edcc782013-12-24 16:13:32 -0500321 The token is an opaque object (that supports equality testing) identifying
322 the current version of the abstract base class cache for virtual subclasses.
323 The token changes with every call to :meth:`ABCMeta.register` on any ABC.
Łukasz Langaeadd8cf2013-05-25 18:41:50 +0200324
325 .. versionadded:: 3.4
326
327
Mark Summerfield08898b42007-09-05 08:43:04 +0000328.. rubric:: Footnotes
329
330.. [#] C++ programmers should note that Python's virtual base class
331 concept is not the same as C++'s.