【发布时间】:2020-11-22 19:55:08
【问题描述】:
有没有办法进入对象的命名空间,以便我可以像使用全局方法一样使用它的方法?我正在考虑使用 with 语句。
class Bar():
def methodA(self):
# do stuff
def methodB(self):
# do more stuff
def __enter__(self):
# somehow enter object namespace / transfer methods into global namespace
def __exit__(self, *args):
# exit object namespace / get rid of globalized methods
foo = Bar()
with foo:
methodA() # all works fine
methodB()
methodA() # throws an error
这只是一个想法,可能根本行不通。或者也许有一个没有 with 语句的解决方案。
【问题讨论】:
-
你能解释一下为什么要这样做吗?
-
我看到了请求的来源(
with构造用于其他语言)。我过去使用过它。我不认为这是一个可取的 Python 模式。这与必须在方法内部编写self有点相关。 -
决定你应该这样做。
-
@MaximilianPeters 最近我一直在玩 Cairo 图形框架,它涉及在同一个对象上连续调用不同的方法。我有一个“如果......不是很好”的时刻。我想写一个包装类来减少 Cairo 样板并管理不同的图像层以最终将它们组合成一个。
标签: python python-3.x with-statement