python - 在 Python 中将值与 __eq__ 进行比较
问题描述
早安/晚安,我是 Python 新手,我正在创建一个名为Alpharange
range 函数的类,但只有大写字母。在我测试该课程是否有效时,我偶然发现了一个奇怪的错误。当我设置它们时letters1 = Alpharange('D')
,letters2 = Alpharange('A', 'D')
它们打印出它们应该打印的相同值,但 Python 说它们彼此不相等。为了解决这个问题,我使用该____eq____
方法返回了 true,虽然修复了错误,但如果我使用其他测试运行它,即使它们彼此不相等letters3 = Alpharange('E')
,它也会返回 true。letters4 = Alpharange('B', 'E')
这是我的班级。是否有更好的使用方法或以other
与我相同的方式使用参数的方法self
?
class AlphabetRange:
def __init__(self, *args):
self.for_loop = tuple(args)
if len(self.for_loop) == 1:
self.start_point = ord('A')
self.end_point = ord(self.for_loop[0])
elif len(self.for_loop) == 2:
self.start_point = ord(self.for_loop[0])
self.end_point = ord(self.for_loop[1])
elif len(self.for_loop) == 3:
self.start_point = ord(self.for_loop[0])
self.end_point = ord(self.for_loop[1])
#Use __iter__ to make obj iterable
def __iter__(self):
if len(self.for_loop) == 1:
self.start_point = ord('A')
return self
elif len(self.for_loop) == 2:
self.start_point = ord(str(self.for_loop[0]))
return self
elif len(self.for_loop) == 3:
self.start_point = ord(self.for_loop[0])
return self
def __next__(self):
#the_end = self.end_point
if self.start_point < self.end_point:
if len(self.for_loop) == 1:
lets = chr(self.start_point)
self.start_point += 1
return lets
elif len(self.for_loop) == 2:
lets = chr(self.start_point)
self.start_point += 1
return lets
elif len(self.for_loop) == 3:
lets = chr(self.start_point)
self.start_point += self.for_loop[2]
return lets
else:
raise StopIteration
def __eq__(self, other):
return True
解决方案
通过__eq__
这样实现,您基本上是在告诉 python,无论什么other
都无所谓,您的对象等于它。相反,您要做的是在其中实现实际逻辑:
def __eq__(self, other):
return self.start_point == other.start_point and self.end_point == other.end_point
旁注:我的代码是为了说明可以使用的某种类型的逻辑。请仔细检查如何区分相似的对象并使用它来确定__eq__
应该如何工作。
推荐阅读
- hyperledger-fabric - 如何更改作曲家休息服务器的设置
- spring-mvc - 有没有办法读取 Spring Security 元数据?
- laravel - Laravel 自定义错误
- ios - 从后台检查
- excel - Excel vba PasteSpecial xlAdd循环
- javascript - 如何使此滚动内容高于内容 120 像素?
- c# - 将数据添加到实体框架中的动态表
- python - 吉他音符的Python FFT频率
- python - selenium add_cookie 需要两个请求
- android - 检测 RecyclerView 内 Recyclerview 的点击