gpt4 book ai didi

python - 在 Python 中检查成员是否存在

转载 作者:IT老高 更新时间:2023-10-28 22:18:41 25 4
gpt4 key购买 nike

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

最佳答案

这是两种不同的方法:№1 是 LBYL(在你跳跃之前先看),№2 是 EAFP(请求宽恕比请求许可更容易)。

Pythonistas 通常建议 EAFP 更好,其参数风格为“如果一个进程在您测试它的时间和您尝试自己创建它的时间之间创建文件怎么办?”。这个论点在这里并不适用,但它是一般的想法。异常不应被视为异常。

在您的情况下性能方面-因为在 CPython 中设置异常管理器(try 关键字)非常便宜,同时创建异常(raise 关键字和内部异常creation) 是相对昂贵的——使用方法 №2 只会引发一次异常;之后,您只需使用该属性。

关于python - 在 Python 中检查成员是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/204308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com