John Machin
1/11/2008 9:08:00 PM
On Jan 11, 9:27 am, "Reedick, Andrew" <jr9...@ATT.COM> wrote:
> > -----Original Message-----
> > From: python-list-bounces+jr9445=att....@python.org [mailto:python-
> > list-bounces+jr9445=att....@python.org] On Behalf Of Adrian Wood
> > Sent: Thursday, January 10, 2008 4:47 PM
> > To: python-l...@python.org
> > Subject: Newbie question on Classes
>
> > I can call man.state() and then woman.state() or Person.state(man) and
> > Person.state(woman) to print the status of each. This takes time and
> > space however, and becomes unmanageable if we start talking about a
> > large number of objects, and unworkable if there is an unknown number.
> > What I'm after is a way to call the status of every instance of Man,
> > without knowing their exact names or number.
>
> How about searching the garbage collector?
Not a good idea, because gc is an implementation artifact and in fact
is specific to the C Python implementation; you won't find it in e.g.
Iron Python or Jython.
Not a good idea, because you are replacing iterating over a collection
of all the objects of interest (and *only* those of interest) with a
clumsy [see below] rummage through a potentially far much larger
collection of objects.
>
> import gc
> from random import random
>
> class Person:
> def __init__(self):
> self.data= random() * 1000 + 1
>
> def WhoAmI(self):
> return self.data
>
> a = Person()
> b = Person()
>
> for i in gc.get_objects():
> try:
> # classes have __class__ and __dict__ defined according to the
> docs
Again, implementation artifacts.
> if i.__class__ and i.__dict__ :
In general, i.__dict_ could be empty. You probably mean
hasattr('__dict__')
> print i.__class__
> if str(i.__class__) == '__main__.Person':
and what if the class is not defined in __main__ but in some other
module?
Have you considered
i.__class__ is Person
or the usual (and underscore-free) idiom
isinstance(i, Person) ?
> print "\tI am", i.WhoAmI()
> except:
> pass
Blindly ignoring all possible exceptions is A Very Bad Idea.