A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://mail.python.org/pipermail/python-dev/2004-March/043661.html below:

[Python-Dev] method decorators (PEP 318)

[Python-Dev] method decorators (PEP 318)Jack Diederich jack at performancedrivers.com
Mon Mar 29 16:40:27 EST 2004
On Mon, Mar 29, 2004 at 01:47:13PM -0700, Shane Holloway (IEEE) wrote:
> grr... spacing didn't quite come out right.  Blasted tabs.  Let's try 
> this again:
> 
>     class Example(object):
>         def foo(self, *args) [
>                 synchronized(lock),
>                 attributes(author='SWH', protocol=IMyProtocol),
>                 myArgumentWireMarshaller,
>                 ]:
>             pass # Code goes here
>         def bar(self, *args) [
>                 synchronized(lock),
>                 attributes(author='SWH', protocol=IMyProtocol),
>                 myArgumentWireMarshaller,
>                 ]:
>             pass # Code goes here
>         def baz(self, *args) [
>                 synchronized(lock),
>                 attributes(author='SWH', protocol=IMyProtocol),
>                 myArgumentWireMarshaller,
>                 ]:
>             pass # Code goes here
> 
> more like:
> 
>     class Example(object):
>         IMyProtocolMethod = [
>             synchronized(lock),
>             attributes(author='SWH', protocol=IMyProtocol),
>             myArgumentWireMarshaller,
>             ]
> 
>         def foo(self, *args) [methodreturns(float)] + IMyProtocolMethod:
>             pass # Code goes here
>         def bar(self, *args) [methodreturns(str)] + IMyProtocolMethod:
>             pass # Code goes here
>         def baz(self, *args) [methodreturns(int)] + IMyProtocolMethod:
>             pass # Code goes here
> 
write IMyProtocolMethod as a decorator instead of a list of decorators:

def IMyProtocol(func):
  for (decor) in [synchronized(lock),
                  attributes(author='SWH', protocol=IMyProtocol),
                  myArgumentWireMarshaller,
                 ]:
    func = decor(func)
  return func

class Example(object):
  def foo(self, *args) [methodreturns(float), IMyProtocol]: pass
  def bar(self, *args) [methodreturns(str), IMyProtocol]: pass
  def baz(self, *args) [methodreturns(int), IMyProtocol]: pass

if you do that a lot, write a helper function

def make_decorator_chain(*decors):
  def anon_decorator(func):
    for (decor) in decors:
      func = decor(func)
    return func
  return anon_decorator

IMyProtocol = make_decorator_chain(synchronized(lock),
                                   attributes(author='SWH', protocol=IMyProtocol),
                                   myArgumentWireMarshaller)

-jackdied

More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4