Steven W. Orr <[EMAIL PROTECTED]> wrote: ... > Thanks Alex. I am humbled, though I was before I started. > I really don't have a lot of understanding of what you're saying so I'll > probably have to study this for about a year or so. > > * (I need to look up what dictproxy is.) I don't have any idea what the > ramifications are of your use of the word DISTINCT. Are you somehow > suggesting that new.classobj does a deep copy of the globals copy that's > passed to it?
No, most definitely NOT deep!!!, but type.__new__ does "a little" of what you've said (a shallow copy, which is not quite "a copy" because it embeds [some of] the entries in slots). new.classobj determines the metaclass (from the bases, or a __metaclass__ entry in the dictionary) and calls it to generate the new class. For modern style classes, the class is type; for old-style legacy classes, it's types.ClassType, and they're not exactly identical in behavior (of course not, or there would no point in having both:-). > > * Also, I'd like to understand what the difference is between > nclass = new.classobj(name,(D1,),globals()) > vs. > def classfactory(): > class somename(object): > def somestuff(): > pass > return somename > G1 = classfactory() > globals()[name] = G1 > > Does new.classobj do anything special? No, new.classobj does essentially the same thing that Python does after evaluating a class statement to prepare the class's name, bases and dictionary: finds the metaclass and calls it with these arguments. A key difference of course is that a class statement prepares the class dictionary as a new, ordinary, distinct dictionary, while new.classobj accepts whatever dictionary you give it (so you can, though shouldn't, do strange things such as pass globals()...:-). Alex -- http://mail.python.org/mailman/listinfo/python-list