Python如何通过Context Manager强制对象实例化?
作者:互联网
我想通过类上下文管理器强制对象实例化.所以不可能直接实例化.
我实现了这个解决方案,但从技术上讲,用户仍然可以实例化对象.
class HessioFile:
"""
Represents a pyhessio file instance
"""
def __init__(self, filename=None, from_context_manager=False):
if not from_context_manager:
raise HessioError('HessioFile can be only use with context manager')
和上下文管理器:
@contextmanager
def open(filename):
"""
...
"""
hessfile = HessioFile(filename, from_context_manager=True)
更好的解决方案?
解决方法:
没有我知道的.通常,如果它存在于python中,您可以找到一种方法来调用它.一个上下文管理器本质上是一个资源管理方案……如果你的类在管理器之外没有用例,也许上下文管理可以集成到类的方法中?我建议从标准库中查看atexit模块.它允许您以与上下文管理器处理清理相同的方式注册清理函数,但您可以将其捆绑到您的类中,以便每个实例都具有已注册的清理函数.可能有帮助.
值得注意的是,没有多少努力会阻止人们使用您的代码做出愚蠢的事情.您最好的选择通常是让人们尽可能轻松地使用您的代码进行智能操作.
标签:python,contextmanager 来源: https://codeday.me/bug/20190623/1267167.html