compare classes and not class instances
Peter Otten
__peter__ at web.de
Thu Mar 2 05:00:52 EST 2006
jantod at gmail.com wrote:
> I not only want to compare class *instances* but also the classes
> themselves. Something like:
> sorted([B, A]) => [A, B]
>
> My motivation for doing so is simply to sort classes based on their
> names and not (as it seems is the default behaviour) on the order in
> which they were created.
>
> I guess I could always just do something like sorted(classes,
> key=lambda cls: cls.__name__)...but where's the fun in that? :-)
A class is just an instance of its metaclass. Therefore the metaclass is the
right place to implement the __cmp__() method:
>>> class T:
... class __metaclass__(type):
... def __cmp__(cls, other):
... return cmp(cls.__name__, other.__name__)
...
>>> class B(T): pass
...
>>> class A(T): pass
...
>>> class C(T): pass
...
>>> sorted([C, B, A])
[<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>]
Peter
More information about the Python-list
mailing list