]> granicus.if.org Git - python/commitdiff
#5250: document __instancecheck__ and __subclasscheck__. I hope the part about the...
authorGeorg Brandl <georg@python.org>
Wed, 14 Apr 2010 21:34:44 +0000 (21:34 +0000)
committerGeorg Brandl <georg@python.org>
Wed, 14 Apr 2010 21:34:44 +0000 (21:34 +0000)
Doc/reference/datamodel.rst

index 2dcaed2f5baef032b3403fc8dfc6e9d172246506..9b187150ae5e3ee65651d54252643eb32cc57fd7 100644 (file)
@@ -1762,6 +1762,48 @@ property creation, proxies, frameworks, and automatic resource
 locking/synchronization.
 
 
+Customizing instance and subclass checks
+----------------------------------------
+
+.. versionadded:: 2.6
+
+The following methods are used to override the default behavior of the
+:func:`isinstance` and :func:`issubclass` built-in functions.
+
+In particular, the metaclass :class:`abc.ABCMeta` implements these methods in
+order to allow the addition of Abstract Base Classes (ABCs) as "virtual base
+classes" to any class or type (including built-in types), and including to other
+ABCs.
+
+.. method:: class.__instancecheck__(self, instance)
+
+   Return true if *instance* should be considered a (direct or indirect)
+   instance of *class*. If defined, called to implement ``isinstance(instance,
+   class)``.
+
+
+.. method:: class.__subclasscheck__(self, subclass)
+
+   Return true if *subclass* should be considered a (direct or indirect)
+   subclass of *class*.  If defined, called to implement ``issubclass(subclass,
+   class)``.
+
+
+Note that these methods are looked up on the type (metaclass) of a class.  They
+cannot be defined as class methods in the actual class.  This is consistent with
+the lookup of special methods that called on instances, only that in this case
+the instance is itself a class.
+
+.. seealso::
+
+   :pep:`3119` - Introducing Abstract Base Classes
+      Includes the specification for customizing :func:`isinstance` and
+      :func:`issubclass` behavior through :meth:`__instancecheck__` and
+      :meth:`__subclasscheck__`, with motivation for this functionality in the
+      context of adding Abstract Base Classes (see the :mod:`abc` module) to the
+      language.
+
+
 .. _callable-types:
 
 Emulating callable objects