クラス・コンテキスト・マネージャを介してオブジェクトのインスタンス化を強制したい。したがって、直接インスタンス化することは不可能にしてください。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)
任意のより良い解決策?
クラスをインスタンス化しないようにする理由は何ですか? – Tryph
その理由は、そのユーザが__init__で開いているファイルを閉じないようにするためです –