Python面向对象编程。编写程序以执行丰富的比较

时间:2018-02-24 03:08:45

标签: python python-3.x class overloading

我正在通过python学习面向对象的编程。我正在尝试编写一个程序,为Fraction类编写三个特殊方法,重载运算符以执行a和b之间的丰富比较。 (a< b,a> b,a == b)。样本将是:

>>>a = Fraction(1, 2)
>>>b = Fraction(1, 3)
>>>a==b
False 
>>>a > b
True
>>>a < b
False
>>>a = Fraction(4, 8)
>>>b = Fraction(2, 4)
>>>a ==b
True
>>>a > b
False
>>>a < b
False

我真的不明白它要做什么。任何有关如何帮助我入门的帮助都会很棒。谢谢。

2 个答案:

答案 0 :(得分:2)

这是一个简单的代码,用于说明这应该如何作为示例。 它在python中很简单,因为它默认有 eq ne ...你只需要更改逻辑部分。

  class Fraction:
        a = 0
        b = 0

        def __init__(self,A,B):
            self.a=A
            self.b=B
        def __eq__(self,other):
            return (self.b/self.a) == (other.b/other.a)

        def __ne__(self,other):
            return not(self.__eq__)

        #*****************************
        # below code only demo, not for your logical
        #*****************************
        def __lt__(self,other):
            return (self.a<other.a)

        def __le__(self,other):
            return(self.a<=other.a)

        def __gt__(self,other):
            return(self.a>other.a)

        def __ge__(self,other):
            return(self.a>=other.a)



    fra_1=Fraction(4,8)
    fra_2=Fraction(2,4)
    print("(fra_1==fra_2) is:",fra_1==fra_2)

答案 1 :(得分:0)

这是在类中实现魔术函数的问题。下面是定义的类。我已经实现了最多检查2个小数位的功能。

class Fraction:
def __init__(self,*fract):
    self.fr=round(float(fract[0])/float(fract[1]),2)
def __eq__(self,f5):
    return self.fr==f5.fr
def __lt__(self,f7):
    return self.fr<f7.fr
def __gt__(self,f8):
    return self.fr>f8.fr