It is my understanding that since type/class unification every value is of a type that derives from object
. However I can't find absolute confirmation of this in the docs. While it stands to reason that isinstance(anything, object)
should always be True
, I could also imagine there being legacy edge cases in the Python 2 codebase. Does anyone know of an example where isinstance(value, object)
is not True
?
Context: as part of a type hierarchy I'm designing, there's an all-encompasing Alpha
type for which I want isinstance(obj, Alpha)
to always return True
. I'm thinking that on Python 2.6+ ABCMeta.register(object)
should do the trick, but I want to be sure.
EDIT: For posterity's sake, ABCMeta.register(object)
will not work (try it). Ethan Furman provides an alternative solution for this case in his answer below.
It is possible to create classes in non-Python code (C
, for example) that do not derive from object
.
You should be able to achieve what you want by adding __subclasshook__
to your Alpha
:
--> import abc
--> class Test(object):
... __metaclass__ = abc.ABCMeta
... @classmethod
... def __subclasshook__(cls, C):
... return True
...
--> isinstance(dict(), Test)
True
--> isinstance(42, Test)
True
--> isinstance(0.59, Test)
True
--> class old_style:
... pass
...
--> isinstance(old_style(), Test)
True
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With