Tool for writing simple decorators
Project description
=======
Decorum
=======
Decorum is a simple tool which aims to make it easier to write flexible
and simple decorators. It can also act similarly to `functools.wraps`.
Typical usage looks like this:
from decorum import decorator
@decorator
class my_decorator:
def wraps(self, f):
print "I'm returning the function! You can keep it!"
return f
Decorum makes lets you write decorators in a unified way. Your decorator can be
used with or without arguments, called or not, and it will work the same way.
@my_decorator
def foo(x): print x
Is identical to:
@my_decorator()
def foo(x): print x
Writing decorators
==================
Decorum provides two easy ways to write your own decorators. You can use `decorum.decorator` to
decorate decorator classes, or you can directly subclass decorum.Decorum. There are only
two methods to be aware of when writing your own decorators. Define a `wraps` method to handle
the actual decoration and return the decorated function, and optionally define an `init` method
to handle any arguments you want to accept, and handle basic setup (it's called before decoration
by `__init__`, you can use it in a similar fashion to a real `__init__` method). By default
decorum will try to keep assign certain attributes to the wrapped function for you, namely `__doc__`
and `__name__`. You can set `keep_attrs` to None to turn this off, or provide it with a list of
attributes you want applied to the returned decorated function.
Here is a slightly fancier example:
from decorum import decorator
@decorator
class fancy:
def init(self, arg=None):
self.arg = arg
def wraps(self, f):
if self.arg:
def newf():
print self.arg
else:
def newf():
print 'wut'
return newf
@fancy
def foo():
pass
foo()
@fancy('woof')
def foo():
pass
foo()
# prints
wut
woof
Decorum
=======
Decorum is a simple tool which aims to make it easier to write flexible
and simple decorators. It can also act similarly to `functools.wraps`.
Typical usage looks like this:
from decorum import decorator
@decorator
class my_decorator:
def wraps(self, f):
print "I'm returning the function! You can keep it!"
return f
Decorum makes lets you write decorators in a unified way. Your decorator can be
used with or without arguments, called or not, and it will work the same way.
@my_decorator
def foo(x): print x
Is identical to:
@my_decorator()
def foo(x): print x
Writing decorators
==================
Decorum provides two easy ways to write your own decorators. You can use `decorum.decorator` to
decorate decorator classes, or you can directly subclass decorum.Decorum. There are only
two methods to be aware of when writing your own decorators. Define a `wraps` method to handle
the actual decoration and return the decorated function, and optionally define an `init` method
to handle any arguments you want to accept, and handle basic setup (it's called before decoration
by `__init__`, you can use it in a similar fashion to a real `__init__` method). By default
decorum will try to keep assign certain attributes to the wrapped function for you, namely `__doc__`
and `__name__`. You can set `keep_attrs` to None to turn this off, or provide it with a list of
attributes you want applied to the returned decorated function.
Here is a slightly fancier example:
from decorum import decorator
@decorator
class fancy:
def init(self, arg=None):
self.arg = arg
def wraps(self, f):
if self.arg:
def newf():
print self.arg
else:
def newf():
print 'wut'
return newf
@fancy
def foo():
pass
foo()
@fancy('woof')
def foo():
pass
foo()
# prints
wut
woof
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Decorum-0.4.tar.gz
(2.1 kB
view details)
File details
Details for the file Decorum-0.4.tar.gz
.
File metadata
- Download URL: Decorum-0.4.tar.gz
- Upload date:
- Size: 2.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7e0a30e088bbc16f00763e51b5fdaa591dd3c7105af8280e380377e4e005a5a |
|
MD5 | 581f91db0a2581e671b401390f2f0934 |
|
BLAKE2b-256 | 94e32d4b41430ecee2241a03342523f30cf798c26853caeb9a33f0796e8fab15 |