How to find the parent of an old-style class?

Jasper jasper at peak.org
Thu Apr 24 19:40:52 EDT 2008


On Apr 24, 10:02 am, Jonathan Gardner <jgard... at jonathangardner.net>
wrote:
> On Apr 24, 7:16 am, Jasper <jas... at peak.org> wrote:
>
> > I'm stuck using a library based on old style classes, and need to find
> > a class's parent at runtime.
>
> > With new style classes you can use .__base__ to inspect a parent, but
> > I can't remember how this was done in days of yore, before object.
> > I've tried googling, but apparently my search term Fu is weak. :-(
>
> > Can anyone help me out here?  There must be something simple.
>
> It's very odd that you need to know a class's parent. I'm interested
> in hearing why you need this. In all my years, I've never had to do
> this.
>
> Regardless, I believe you are looking for __bases__.

*smack*  That's what I get for programming too late into the morning;
can't believe I missed that.  Thanks for sorting me out!

-Jasper


PS  I'm using a hierarchy of (never instantiated) classes as resource
types in an economic sim, e.g. Resource, Luxury( Resource ),
Gold( Luxury ).  Prices are dicts of {resource:amount}, where resource
can be something concrete like Gold, or a general group like Luxury
(which could be paid with Gold, but also Ivory, etc).  Payments are in
dicts of {concrete-resource:amount}, and to verify correct payment I
iterate through them, matching concrete resources (via their parent)
to general price requirements like Luxury or Resource.  I could avoid
referencing __bases__ by instead iterating through price and checking
issubclass(), but the logic is more complex.

And yes, I know this is a bit of an unorthodox use of classes. ;-)



More information about the Python-list mailing list