Prothon Prototypes vs Python Classes

Michele Simionato michele.simionato at poste.it
Sun Mar 28 08:52:10 EST 2004


Joe Mason <joe at notcharles.ca> wrote in message news:<slrnc6cr9n.dit.joe at gate.notcharles.ca>...
> Cool.  How come this isn't in either the Language Reference or Library
> Reference?  I just skimmed through those looking for special
> class-related methods the other day, when I first started looking at
> prototypes, and didn't notice __subclasses__, and now I can't find it in
> the index. 

Google this newsgroup for __subclasses__. For some reason the 
developers choose not to document it, but it is there and it seems to be
working. Just as curiosity, __subclasses__ is a meta-method, i.e. it
is a method of the metaclass "type" and not a class method of "object".
For this reason "dir" does not show it

>>> class C(object): pass
...
>>> dir(C)
['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash_
_', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr_
_', '__setattr__', '__str__', '__weakref__']

but it is there:

>>> C.__subclasses__()
[]

since it is "acquired" (I don't want to use the word "inherited") from
"type":

>>> dir(type)
['__base__', '__bases__', '__basicsize__', '__call__', '__class__', '__cmp__', '
__delattr__', '__dict__', '__dictoffset__', '__doc__', '__flags__', '__getattrib
ute__', '__hash__', '__init__', '__itemsize__', '__module__', '__mro__', '__name
__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str
__', '__subclasses__', '__weakrefoffset__', 'mro']

As you see, mro() is another example of meta-method. I shamelessly remind
to http://www-106.ibm.com/developerworks/linux/library/l-pymeta2/
for more info.

         Michele Simionato



More information about the Python-list mailing list