Я регулярно хочу проверить, имеет ли объект член или нет. Примером является создание одноэлементности в функции. Для этого вы можете использовать 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
... Но обратите внимание, что вопрос заключается не в том, как сделать singleton, а в том, как проверить наличие элемента в объекте.
Изменить: Для этого примера типичным будет использование:
s = Foo.singleton()
Тогда s
является объектом типа Foo
, то же самое каждый раз. И, как правило, метод вызывается много раз.