擅长:python、mysql、java
<p>我用我以前在Python2中做过的东西,建造了自己的装饰工。在</p>
<p>我没有使用上下文管理器,而是使用了<code>try...finally</code>结构。在</p>
<p>以下是我的想法(我去掉了所有能使docstring正确的东西):</p>
<pre><code>class savePen(object):
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
"""This provides support for functions """
dc = args[0]
prevPen = dc.GetPen()
try:
retval = self.func(*args, **kwargs)
finally:
dc.SetPen(prevPen)
return retval
def __get__(self, obj, objtype):
""" And this provides support for instance methods """
@functools.wraps(self.func)
def wrapper(*args, **kwargs):
dc = args[0]
prevPen = dc.GetPen()
try:
retval = self.func(obj, *args, **kwargs)
finally:
dc.SetPen(prevPen)
return retval
return wrapper
</code></pre>