Re: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code
Available news archives: comp.lang.tcl - comp.lang.python - comp.security.firewalls - sci.crypt - comp.lang.php - comp.lang.javascript
Google
 
Web news.hping.org


comp.lang.python archive

Re: Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code

From: Ralf W. Grosse-Kunstleve <rwgk@yahoo.com>
Date: Tue Jul 12 2005 - 00:19:29 CEST

--- Lonnie Princehouse <finite.automaton@gmail.com> wrote:

> IIRC, the self.__dict__.update(locals()) trick confuses psyco.
>
> But you can make a decorator to achieve the same result. There's not
> really a convincing case for extending python syntax.

Not if you have (enough memory for) psyco. :)
I am doing C++ extensions by hand; did quite a lot of them. Anything that helps
in pushing back the point where I have to move from Python to C++ is highly
appreciated. That's probably the strongest argument for the (self, self.x, ...)
approach. I believe it can be made more efficient than any other solution. But
see also the two other arguments:

    http://mail.python.org/pipermail/python-list/2005-July/289721.html

> def attribute_decorator(f):
> import inspect
> argnames = inspect.getargspec(f)[0]
> def decorator(*args, **keywords):
> bound_instance = args[0]
> for name, value in zip(argnames[1:], args[1:]):
> setattr(bound_instance, name, value)
> return f(*args, **keywords)
> return decorator
>
> #--------- example use:
>
> class foo(object):
> @attribute_decorator
> def __init__(self, thing):
> print "init: self.thing is", repr(self.thing)
>
> f = foo('hello world')

Thanks! Rob Williscroft had a similar suggestion:

    http://mail.python.org/pipermail/python-list/2005-July/289734.html

Does anyone know if there is a way to hide the _ or self_ from the user of the
class, i.e. given:

    class foo(object):
      @attribute_decorator
      def __init__(self, x, _y, z):
         pass

can we make it such that the user can still write

    foo(x=1,y=2,z=3)

without the underscore?

Cheers,
        Ralf

                
__________________________________
Discover Yahoo!
Use Yahoo! to plan a weekend, have fun online and more. Check it out!
http://discover.yahoo.com/
Received on Thu Sep 29 16:53:07 2005