在python中,有没有一种方法可以使函数/类的行为类似于函数和上下文管理器?你知道吗
注意:我需要函数/类返回一个没有__exit__
方法的对象,并且我不能更改该对象(这就是我包装它的原因)。你知道吗
所以仅仅用__enter__
和__exit__
创建一个类是行不通的,因为我需要它也像函数一样工作。你知道吗
我试过contextmanager
装饰器:
@contextmanager
def my_context_man(my_str):
my_str = 'begging ' + my_str
yield my_str+' after func'
print('end')
它在上下文管理器中工作得很好,但不是一个函数:
a = 'middle'
old_a = my_context_man(a)
print('old_a', old_a)
with my_context_man(a) as new_a:
print('new_a', new_a)
输出:
old_a <contextlib._GeneratorContextManager object at 0x0000000004F832E8>
new_a begging middle after func
end
而期望的输出将是:
old_a begging middle after func
new_a begging middle after func
end
编辑:
我遇到的具体问题是psycopg2
模块。
我想使用不同的上下文管理器。它返回一个连接对象。你知道吗
def connect(dsn=None, connection_factory=None, cursor_factory=None, **kwargs):
*the connection code*
return conn
我正在尝试更改它,以便人们能够将它与我的上下文管理器一起使用,但不会破坏代码。 我无法更改conn对象
您的
__new__
方法没有返回my_context_man
的实例,但是str
的实例和str
没有__enter__
方法。是__enter__
的返回值绑定到with
语句中as
后面的名称。你想要什么相关问题 更多 >
编程相关推荐