0

我是 Python 新手,

初始化f类的实例后Fraction,我希望该方法reduce已被调用,所以print结果是减少后

f = Fraction(3,6)

print f #=> 1/2 not 3/6

这是代码:

class Fraction(object):
    '''Define a fraction type'''
    def __init__(self, num=0, denom=1):
        '''Create a new Fraction with numerator num and denominator demon'''
        self.numerator = num
        if denom != 0:
            self.denominator = denom
        else:
            raise ZeroDivisionError
    def reduce(self):
        gcd = findgcd(self.numerator, self.denominator)
        self.numerator /= gcd
        self.denominator /= gcd

    def findgcd(self, x, y):
        gcd = None
        min_number = min(x, y)
        for i in range(min_number, 1, -1):
            if x % i == 0 and y % i == 0:
                gcd = i
        return gcd

    def __repr__(self):
        return "{0}/{1}".format(self.numerator, self.denominator)
4

2 回答 2

2

是什么阻止您self.reduce()在方法结束时调用__init__

于 2012-10-12T02:02:58.060 回答
0

你有两个问题:

  1. 您需要调用self.reduce()构造函数__init__reduce()在实例化阶段调用方法。
  2. 你还需要改变:

    def reduce(self):
        gcd = findgcd(self.numerator, self.denominator)
    

    到:

    def reduce(self):
        gcd = self.findgcd(self.numerator, self.denominator)
    

因为否则您的实例将无法找到findgcd.


以下代码将解决您的问题:

class Fraction(object):
    '''Define a fraction type'''
    def __init__(self, num=0, denom=1):
        '''Create a new Fraction with numerator num and denominator demon'''
        self.numerator = num
        if denom != 0:
            self.denominator = denom
        else:
            raise ZeroDivisionError
        self.reduce()

    def reduce(self):
        gcd = self.findgcd(self.numerator, self.denominator)
        self.numerator /= gcd
        self.denominator /= gcd

    def findgcd(self, x, y):
        gcd = None
        min_number = min(x, y)
        for i in range(min_number, 1, -1):
            if x % i == 0 and y % i == 0:
                gcd = i
        return gcd

    def __repr__(self):
        return "{0}/{1}".format(self.numerator, self.denominator)

>>>> f = Fraction(3,6)
>>>> f
1/2
于 2012-10-12T02:03:45.590 回答