[Python-Dev] Re: Guido's Magic Code was: inline sort option

Guido van Rossum guido at python.org
Thu Oct 30 00:31:01 EST 2003


> Notwithstanding the "perverted" implementation, Alex's idea is
> absolutely wonderful and addresses a core usability issue with
> classmethods.

I'm not so sure.  I think the main issue is that Python users aren't
used to static methods; C++ and Java users should be familiar with
them and I don't think they cause much trouble there.

> If only in the C API, I would like to see just such a universalmethod
> alternative to classmethod.  That would allow different behaviors to be
> assigned depending on how the method is called.
> 
> Both list.sort() and dict.fromkeys() would benefit from it:
> 
> 
> class MagicDict(dict):
> 
>     def _class_fromkeys(cls, lst, value=True):
>         "Make a new dict using keys from list and the given value"
>         obj = cls()
>         for elem in lst:
>             obj[elem] = value
>         return obj
> 
>     def _inst_fromkeys(self, lst, value=True):
>         "Update an existing dict using keys from list and the given value"
>         for elem in lst:
>             self[elem] = value
>         return self
> 
>     newfromkeys = MagicDescriptor(_class_fromkeys, _inst_fromkeys)
> 
> print MagicDict.newfromkeys('abc')
> print MagicDict(a=1, d=2).newfromkeys('abc')

But your _inst_fromkeys mutates self!  That completely defeats the
purpose (especially since it also returns self) and I am as much
against this (approx. -1000 :-) as I am against sort() returning self.

To me this pretty much proves that this is a bad idea; such a schizo
method will confuse users more that a class method that ignores the
instance.

And if you made an honest mistake, and meant to ignore the instance,
it still proves that this is too confusing to do! :-)

--Guido van Rossum (home page: http://www.python.org/~guido/)




More information about the Python-Dev mailing list