Regularmente quiero comprobar si un objeto tiene un miembro o no. Un ejemplo es la creación de un singleton en una función. A tal fin, se puede utilizar hasattr
así:Comprobando la existencia del miembro en Python
class Foo(object):
@classmethod
def singleton(self):
if not hasattr(self, 'instance'):
self.instance = Foo()
return self.instance
Pero también se puede hacer esto:
class Foo(object):
@classmethod
def singleton(self):
try:
return self.instance
except AttributeError:
self.instance = Foo()
return self.instance
es un método mejor de la otra?
Editar: Agregado el @classmethod
... Pero tenga en cuenta que la cuestión es no acerca de cómo hacer un producto único, pero cómo comprobar la presencia de un miembro de un objeto.
Editar: Para ese ejemplo, un uso típico sería:
s = Foo.singleton()
Entonces s
es un objeto de tipo Foo
, la misma cada vez. Y, típicamente, el método se llama muchas veces.
¿Puede dar un ejemplo de una llamada que está tratando de hacer, y el retorno esperado de esa llamada? – Baltimark