我现在正在研究一个book,我有一个关于exercises(#6)的问题。
所以我们有一个手工制作的Fraction
类,除了所有其他类型的东西之外,我们还想比较两个分数。你知道吗
class Fraction:
def __init__(self, num, den):
if not (isinstance(num, int) and isinstance(den, int)):
raise ValueError('Got non-int argument')
if den == 0:
raise ValueError('Got 0 denominator')
self.num = num
self.den = den
# some class methods
def __lt__(self, other):
selfnum = self.num * other.den
othernum = other.num * self.den
return selfnum < othernum
# some class methods
# trying it out
x = Fraction(1, -2)
y = Fraction(1, 3)
但是,当我们计算x < y
时,结果是False
。我想为商店的招牌做一个新的属性,但那会把事情搞得一团糟。你知道吗
由于缺乏更好的选择,我在方法中添加了if
,下面是我得到的结果
def __lt__(self, other):
selfnum = self.num * other.den
othernum = other.num * self.den
if self.den * other.den > 0:
return selfnum < othernum
else:
return selfnum > othernum
虽然这似乎是工作,我想知道,如果有更优雅的解决方案。你知道吗
更新 存储sign-in-numerator实现了我想要的功能(我可以只更改两行,而不是在每个方法中添加一个条件)。你知道吗
如果假设两个分母都是正的,那么可以安全地进行比较(因为
a/b < c/d
意味着ad < bc
)。我只想把符号储存在分子里:或:
你的
__lt__
方法可以是:相关问题 更多 >
编程相关推荐