オブジェクトにメンバーがあるかどうかを定期的に確認したいと思います。例として、関数内でのシングルトンの作成があります。そのために、次hasattr
のように使用できます。
class Foo(object):
@classmethod
def singleton(self):
if not hasattr(self, 'instance'):
self.instance = Foo()
return self.instance
しかし、これを行うこともできます:
class Foo(object):
@classmethod
def singleton(self):
try:
return self.instance
except AttributeError:
self.instance = Foo()
return self.instance
ある方法が他の方法よりも優れていますか?
編集:追加...しかし、問題はシングルトンの作成方法ではなく@classmethod
、オブジェクト内のメンバーの存在を確認する方法であることに注意してください。
編集:その例では、典型的な使用法は次のようになります。
s = Foo.singleton()
次にs
、タイプ のオブジェクトでFoo
、毎回同じです。そして、通常、メソッドは何度も呼び出されます。