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.
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.
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().)