Really stupid question regarding PEP 252 and type/class unification

Russell Turpin russell_turpin at hotmail.com
Fri Aug 24 03:11:54 CEST 2001


Neil Schemenauer <nas at python.ca> wrote in message news:<mailman.998582617.17836.python-list at python.org>...
> The object "lst" does not have some hidden attribute that 
> is a list. It really is itself a list object.  That's the 
> way things are implemented. Using some other mental model 
> is bound to get you into trouble sooner or later.

This gets to the nub of the matter. Let's take your example:

    class MyList(list):
        pass

    lst = MyList()

So "lst" is really a list. But it also is really an object,
instantiated from a class. So one can do things like:

    lst.a = "I just created attribute 'a'."
    lst.b = []

This is correct, right? Or is the idea that we will have two
species of classes, "types," which don't allow statements like
the above, and "true classes" which do? Anyway, assuming my
extension to the example is allowed, it now looks to me that
"lst" is (has been promoted to?) an object with three 
attributes:

    x.a == "I just created attribute 'a'."
    x.b == []
    x == []           # The default attribute

There is something that bothers me about this, but with my
sore forehead, I am unable to articulate it. Of course, I'm
even more distressed if it turns out that assigning attributes
to lst is not allowed, since this violates what I know about 
how "class" works. (And since we can now assign attributes 
even to lowly functions, why not to a type-derived class??)
If the intended model is the "two classes of class," can they 
be mixed in multiple inheritance?

    class Centaur(SomeTrueClass, MyList):
        pass

Will this generate an error? Or what about:

    class Mosaic(SomeTrueClass, dictionary):
        pass

And if I can't mix true classes with types, can I mix types?

    class Confused(dictionary, int):
        pass

    spegg = Confused()

Is "spegg" really a dictionary? Really an int? Really an 
object? Or is all of this disallowed, and we now have some 
fairly complex rules about how you may or may not use two 
classes of class? 

Oh, my poor forehead!

Russell



More information about the Python-list mailing list