たとえば、コンストラクタで、失敗する可能性のあるリソースを取得する必要があります。この場合、クラスをインスタンス化しないでください。Pythonでは、コンストラクタが失敗するクラスを実装する適切な方法は何ですか?
コンストラクタで例外をスローする必要がありますか?
class Foo(object):
def __init__(self):
self.rsc = get_resource():
assert self.rsc
インスタンス化コードで捕捉しようとしますか?
try:
a = Foo()
except:
a = None
その後、aがNoneであるかどうかをチェックします。本当に
良いです。その結果、軽量のコンストラクタと、失敗しないコンストラクタの2つの利点が得られます。次に、必要に応じて、リソースを暗黙的に取得する関数を提供し、Noneを返すか、リソースでコンストラクタを呼び出します。 – amalloy
あなたが提案したものはうまく聞こえます。問題は、その障害が発生した場合に起こりたいことです。それを処理する必要がある呼び出しコードの場合は、あなたが提案したように呼び出しコードで例外をキャッチする必要があります。 – BrenBarn