gpt4 book ai didi

Python:你能让这个 __eq__ 容易理解吗?

转载 作者:太空狗 更新时间:2023-10-30 01:39:27 25 4
gpt4 key购买 nike

我还有一个问题要问你。

我有一个带有列表“元信息”的 python 类。此列表包含我的类可能 包含的变量名称。我编写了一个 __eq__ 方法,如果 selfother 具有来自 metainfo 的相同变量并且那些变量具有相同的值。

这是我的实现:

 def __eq__(self, other):
for attr in self.metainfo:
try:
ours = getattr(self, attr)
try:
theirs = getattr(other, attr)
if ours != theirs:
return False
except AttributeError:
return False
except AttributeError:
try:
theirs = getattr(other, attr)
return False
except AttributeError:
pass
return True

有没有人对我如何使这段代码看起来更容易有任何建议?随心所欲。

最佳答案

使用 getattr设置不同默认值的第三个参数:

def __eq__(self, other):
return all(getattr(self, a, Ellipsis) == getattr(other, a, Ellipsis)
for a in self.metainfo)

作为默认值,设置永远不会是实际值的值,例如 Ellipsis 。因此,仅当两个对象都包含某个属性的相同值时,这些值才会匹配如果两个对象都没有所述属性。

编辑:作为Nadia指出,NotImplemented可能是一个更合适的常量(除非您要存储丰富比较的结果...)。

编辑 2: 的确如此,如 Lac指出,只需使用 hasattr产生更具可读性的解决方案:

def __eq__(self, other):
return all(hasattr(self, a) == hasattr(other, a) and
getattr(self, a) == getattr(other, a) for a in self.metainfo)

:为了更加隐晦,您可以编写 ... 而不是 Ellipsis,因此 getattr(self, a, . ..) 等。不,不要这样做 :)

关于Python:你能让这个 __eq__ 容易理解吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803710/

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