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