有没有更好的方法来实现这一目标:
if condition:
with context:
do_the_thing()
else:
do_the_thing()
基本上,在条件的两种情况下,都会做同样的事情,除非如果条件为真,则用特定的上下文完成。
答案 0 :(得分:0)
可能是这样的,使用工厂方法。
class BaseContext(object):
def __enter__(*args, **kwargs):
return self
def __exit__(*args, **kwargs):
return 0
# Doesn't have to be a class, but for the example
class ContextFactory(object):
@staticmethod
def make(name):
if not name:
return BaseContext
... other contexts ...
这样,你可以这样做:
with ContextFactory.make(condition_name):
do_the_thing()
因此,条件被隐藏在工厂中,并且您的消费代码库不需要就上下文是否必要做出决定。