我经常想检查一个对象是否有成员。一个例子是在函数中创建单例。为此,您可以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
每次都一样。而且,通常,该方法会被多次调用。