在我正在构建的图形 API 中,我想创建一个也可以用作上下文管理器的方法:
该方法当前如下所示:
class Gfx:
def __init__(self):
self._fill = None
def fill(self, color):
self._fill = color
我可以制作一个在使用后恢复状态的上下文管理器,如下所示:
class Gfx:
def __init__(self):
self._fill = None
@contextmanager
def fill(self, color):
"""Allow user to set fill color, then restore it"""
old_fill = self._fill
self._fill = color
yield
self._fill = old_fill
但是我怎样才能使这两种方式都起作用,这取决于它的调用方式?
>>> gfx = Gfx()
>>> gfx.fill("red") # use as ordinary method
>>> print(self._fill)
"red"
>>> with gfx.fill("blue") # use as context manager
... print(gfx._fill)
"blue"
>>> print(gfx._fill)
"red"