2012-10-12 36 views
0

我是新来的Python,如何在实例的初始化过程中调用某些方法在Python

初始化Fraction类的一个实例f后,我想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) 
+0

我可能会混淆,但听起来好像你只是想在结束调用self.reduce()您的\ _ \ _ INIT \ _ \_ 方法? – monkut

+1

'从分数进口Fraction' – jfs

回答

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 
+0

感谢您的全面答复,并+1表格指出'self.gcd'的另一个错误。顺便说一句,我们有相同的姓氏。你是中国凯吗? – mko

+0

@yozloy很高兴帮助! (是的:)中国 - 加拿大准确) –

+0

太棒了!和WOW!'电线上的男人'也是我的最爱!我跟着你在twitter上 – mko

2

什么阻止你调用self.reduce()__init__方法结束?

+0

+1为简单的答案,它的工作原理,我知道我当时在想什么,谢谢 – mko

相关问题