Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #8576
| Date | 2011-06-29 12:30 -0700 |
|---|---|
| From | Ethan Furman <ethan@stoneleaf.us> |
| Subject | Re: Using decorators with argument in Python |
| References | <d35e1e82-410b-471b-a3c7-379c1822adb0@m22g2000yqh.googlegroups.com> <4e0a0a8b$1@dnews.tpgi.com.au> <4E0B5F7C.7030802@codicesoftware.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.504.1309374983.1164.python-list@python.org> (permalink) |
John Posner wrote:
> Investigating how this fact fit in with the current thread, I came up
> with an alternative to the three levels of "def" (pronounced "three
> levels of death"). Following is code for two decorators:
>
> * the first one encloses the output of a function with lines of "#"
> characters, and is used like this:
>
> @enclose
> myfun(...
>
> * the second one encloses the output of a function with lines of a
> user-specified character, and is used like this:
>
> @enclose("&")
> myfun(...
>
> Here's the Python2 code for each one:
[snippety-snip]
How about just having one bit of code that works either way?
8<------------------------------------------------------------------
class enclose(object):
def __init__(self, char='#'):
self.char = char
if callable(char): # was a function passed in directly?
self.char = '#' # use default char
self.func = char
def __call__(self, func=None):
if func is None:
return self._call()
self.func = func
return self
def _call(self):
print("\n" + self.char * 50)
self.func()
print(self.char * 50 + '\n')
if __name__ == '__main__':
@enclose
def test1():
print('Spam!')
@enclose('-')
def test2():
print('Eggs!')
test1()
test2()
8<------------------------------------------------------------------
Output:
##################################################
Spam!
##################################################
--------------------------------------------------
Eggs!
--------------------------------------------------
8<------------------------------------------------------------------
~Ethan~
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Using decorators with argument in Python Jigar Tanna <poisonousrattle5@gmail.com> - 2011-06-28 09:52 -0700
Re: Using decorators with argument in Python Lie Ryan <lie.1296@gmail.com> - 2011-06-29 03:06 +1000
Re: Using decorators with argument in Python John Posner <jjposner@codicesoftware.com> - 2011-06-29 13:23 -0400
Re: Using decorators with argument in Python Ethan Furman <ethan@stoneleaf.us> - 2011-06-29 12:30 -0700
Re: Using decorators with argument in Python Ian Kelly <ian.g.kelly@gmail.com> - 2011-06-29 13:29 -0600
Re: Using decorators with argument in Python Ethan Furman <ethan@stoneleaf.us> - 2011-06-29 14:29 -0700
Re: Using decorators with argument in Python Ian Kelly <ian.g.kelly@gmail.com> - 2011-06-29 15:26 -0600
Re: Using decorators with argument in Python Ethan Furman <ethan@stoneleaf.us> - 2011-06-29 14:51 -0700
Re: Using decorators with argument in Python Duncan Booth <duncan.booth@invalid.invalid> - 2011-06-30 09:00 +0000
Re: Using decorators with argument in Python John Posner <jjposner@codicesoftware.com> - 2011-07-01 11:18 -0400
Re: Using decorators with argument in Python Ian Kelly <ian.g.kelly@gmail.com> - 2011-06-28 11:20 -0600
Re: Using decorators with argument in Python Ben Finney <ben+python@benfinney.id.au> - 2011-06-29 08:19 +1000
csiph-web