Is there a better way of coding this?
Sean Ross
sross at connectmail.carleton.ca
Sun Jun 1 12:01:25 EDT 2003
Have a look at this recipe for automating the creation of simple readonly,
writeonly, or read and write properties.
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/157768
You can also find a metaclass implementation here:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/197965
These should give you some ideas. Have fun.
Sean
"Edward C. Jones" <edcjones at erols.com> wrote in message
news:bbd6so$4sb$1 at bob.news.rcn.net...
> I wrote the following code so the writer of "Fgeti" could ignore some
> subtle error processing. Can this code be rewritten without the template
> and the exec? Perhaps using the "curry" class below?
>
> Thanks,
> Ed Jones
>
> -----------------------------------------------------------------
>
> template ="""\
> def <@getname@>(self):
> # Subtle error processing here.
> self.<@truename@> = self.<@funname@>(self.data)
> return self.<@truename@>
>
> <@attrname@> = property(<@getname@>, None, None)
> """
>
> def makeget(getname, truename, funnanme, attrname):
> text = template.replace('<@getname@>', getname)
> text = text.replace('<@truename@>', truename)
> text = text.replace('<@funname@>', funnanme)
> return text.replace('<@attrname@>', attrname)
>
> class X(object):
> exec makeget('geti', '_i', 'Fgeti', 'i')
>
> def __init__(self):
> self.data = 7
>
> def Fgeti(self, i):
> return 2*i
>
> x = X()
> print x.i
> print x.__dict__
>
> -----------------------------------------------------------------
>
> # A curry class from the net.
> class curry:
> def __init__(self, fun, *args, **kwargs):
> self.fun = fun
> self.pending = args[:]
> self.kwargs = kwargs.copy()
>
> def __call__(self, *args, **kwargs):
> if kwargs and self.kwargs:
> kw = self.kwargs.copy()
> kw.update(kwargs)
> else:
> kw = kwargs or self.kwargs
>
> return self.fun(*(self.pending + args), **kw)
>
More information about the Python-list
mailing list