Проверка существования члена в Python
Я регулярно хочу проверить, есть ли у объекта член или нет. Примером является создание синглтона в функции. Для этого вы можете использовать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
, то же самое каждый раз. И, как правило, метод вызывается много раз.