You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Document __instancecheck__ and __subclasscheck__ #49500
http://www.python.org/dev/peps/pep-3119/#overloading-isinstance-and-issubclass
(GvR and Talin)
"The primary mechanism proposed here is to allow overloading the
built-in functions isinstance() and issubclass(). The overloading works
as follows: The call isinstance(x, C) first checks whether
C.__instancecheck__ exists, and if so, calls C.__instancecheck__(x)
instead of its normal implementation. Similarly, the call issubclass(D,
C) first checks whether C.__subclasscheck__ exists, and if so, calls
C.__subclasscheck__(D) instead of its normal implementation."
These two new special methods are not documented (for 3.x at least. A
post on python-list today verifies that at least .__instancecheck__ was
implemented (version not specified). I assume .__subclasscheck__ was
also. This issue perhaps applies to 2.6/2.7 also.
I suggest either adding "Customizing instance and subclass checks" after
"Customizing class creation" or add to that section and rename it to
"Customizing class creation and checks" since the needed addition seems
too small for its own section. Something like
The result of isinstance(object, class) can be modified by giving the
*class* a .__instancecheck__(object) method. The result of
issubclass(sub,super) can be modified by giving the *superclass* a
.__subclasscheck__(sub) method.
There's a verb missing from he following sentence of the patch:
"This is consistent with the lookup of special methods that called on instances, only that in this case the instance is itself a class."
Secondly, and more importantly, the issubclass() and isinstance() docs don't mention the new special methods in question.
Fixed the missing verb in r80084. I don't think the new special methods need to be mention in isinstance() or issubclass() docs; they are very rarely needed, and other builtins don't mention their special methods either (e.g. abs(), complex(), or getattr().)
Activity
terryjreedy commentedon Feb 13, 2009
http://www.python.org/dev/peps/pep-3119/#overloading-isinstance-and-issubclass
(GvR and Talin)
"The primary mechanism proposed here is to allow overloading the
built-in functions isinstance() and issubclass(). The overloading works
as follows: The call isinstance(x, C) first checks whether
C.__instancecheck__ exists, and if so, calls C.__instancecheck__(x)
instead of its normal implementation. Similarly, the call issubclass(D,
C) first checks whether C.__subclasscheck__ exists, and if so, calls
C.__subclasscheck__(D) instead of its normal implementation."
These two new special methods are not documented (for 3.x at least. A
post on python-list today verifies that at least .__instancecheck__ was
implemented (version not specified). I assume .__subclasscheck__ was
also. This issue perhaps applies to 2.6/2.7 also.
I suggest either adding "Customizing instance and subclass checks" after
"Customizing class creation" or add to that section and rename it to
"Customizing class creation and checks" since the needed addition seems
too small for its own section. Something like
The result of isinstance(object, class) can be modified by giving the
*class* a .__instancecheck__(object) method. The result of
issubclass(sub,super) can be modified by giving the *superclass* a
.__subclasscheck__(sub) method.
cvrebert commentedon Apr 12, 2010
Here's a draft of an updated version of the "Data model" docs reflecting the changes in the PEP.
birkenfeld commentedon Apr 14, 2010
Committed a similar patch in r80081. Thanks very much!
cvrebert commentedon Apr 14, 2010
This might need to be reopened.
There's a verb missing from he following sentence of the patch:
"This is consistent with the lookup of special methods that called on instances, only that in this case the instance is itself a class."
Secondly, and more importantly, the issubclass() and isinstance() docs don't mention the new special methods in question.
birkenfeld commentedon Apr 14, 2010
Fixed the missing verb in r80084. I don't think the new special methods need to be mention in isinstance() or issubclass() docs; they are very rarely needed, and other builtins don't mention their special methods either (e.g. abs(), complex(), or getattr().)
cvrebert commentedon Apr 19, 2010
One last triviality: Could the mention of __subclasscheck__() in http://docs.python.org/dev/library/abc.html#abc.ABCMeta.\_\_subclasshook__ get linked to the newly-added docs?