[Tutor] SEC: UNCLASSIFIED:-Object Ancestry
Michael P. Reilly
arcege@shore.net
Tue, 16 Nov 1999 22:10:03 -0500 (EST)
> Is there a nice way to determine which classes an object inherits from, short of
> putting
> in capability queries or using __init__ to add a reference to that class to an
> inherit_list
> variable?
Each instance has an "__class__" attribute which references its class
object, and each class has a "__bases__" attribute which is a tuple of
the inherited classes, if any. There are also two standard, built-in
functions which can test for inheritance: isinstance() and
issubclass().
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> a, b = A(), B()
>>> a.__class__
<class __main__.A at 80cbc70>
>>> a.__class__ is A
1
>>> A.__bases__
()
>>> b.__class__
<class __main__.B at 80c9d80>
>>> B.__bases__
(<class __main__.A at 80cbc70>,)
>>> B.__bases__[0] is A
1
>>> A in b.__class__.__bases__
1
>>> isinstance(a, A)
1
>>> isinstance(a, B)
0
>>> isinstance(b, B)
1
>>> isinstance(b, A)
1
>>> issubclass(B, A)
1
>>> issubclass(A, B)
0
>>>
The isinstance() function also works with types.
-Arcege
--
------------------------------------------------------------------------
| Michael P. Reilly, Release Engineer | Email: arcege@shore.net |
| Salem, Mass. USA 01970 | |
------------------------------------------------------------------------