On Oct 11, 2007, at 12:49 AM, Andreas Kraemer wrote: > On Oct 10, 6:19 pm, Karlo Lozovina <[EMAIL PROTECTED]> wrote: >> Larry Bates wrote: >>> I'm not completely sure I understand the question but here goes. >>> Instances of >>> classes are classes can be stored in lists or dictionaries. In >>> lists you >>> reference them via their index (or iterate over them) and in >>> dictionaries >>> you can give them a name that is used as a key. >> >> I wish if it were that simple :). >> >> Here is a longer description - I have a function that given input >> creates a >> custom class and returns it back. The user is free to subclass >> that (even >> more, he should do that), and of course he will make instances of >> those >> subclasses. Now, my question is how to keep track of subclasses >> and their >> instances, without the need for user interaction (appending them >> to a list, >> or adding to dictionary)? >> >> Thanks, >> >> -- >> Karlo Lozovina - Mosorclass Meta(type): > > What about the following solution? > > class Meta(type): > def __new__(mcl,*args,**kw): > class_ = super(Meta,mcl).__new__(mcl,*args,**kw) > mcl._classes.append(class_) > class_._instances = [] > return class_ > _classes = [] > > def factory(): > class Class(object): > __metaclass__ = Meta > def __new__(cls,*args,**kw): > instance = super(Class,cls).__new__(cls,*args,**kw) > cls._instances.append(instance) > return instance > return Class > >>>> A = factory() >>>> class B(A): pass > ... >>>> a = A() >>>> b = B() >>>> Meta._classes > [<class 'meta.Class'>, <class '__main__.B'>] >>>> A._instances > [<meta.Class object at 0xb7dbb08c>] >>>> B._instances > [<__main__.B object at 0xb7dbb0ec>] > > So, you see that you can access all classes, their subclasses, and > instances from Meta. > > Of course in a more elaborate version _classes and _instances should > store weak references, so that classes and instances can actually be > deleted. I also haven't explored under which circumstances this can > break ... > > I can imagine different use cases for this, (though they certainly are > non-standard :-)). I once contemplated the (toy-) implementation of a > frame-based knowledge representation system using Python's object > model, where one definitely needs classes to keep track of their > instances ...
Another use case that I've run across is when defining model classes using an ORM against a database that uses table inheritance extensively with the result that the database has way more tables than you'd actually want to manually maintain model classes/files for. Erik Jones Software Developer | Emma® [EMAIL PROTECTED] 800.595.4401 or 615.292.5888 615.292.0777 (fax) Emma helps organizations everywhere communicate & market in style. Visit us online at http://www.myemma.com -- http://mail.python.org/mailman/listinfo/python-list