2017-09-25 173 views
0

我已經搜索了關於轉換類的類似問題,但沒有人真的幫助過我。轉換對象到另一個類

我有一個分數類,並希望如果可能將其簡化爲int。

class Fraction: 
    def __init__(self, numerator, denominator): 
     self.numerator = numerator 
     self.denominator = denominator 
     self.simplify() 

     if self.denominator == 1: 
      # convert self to int of value numerator 

我有Fraction類內的功能被創建時,這將簡化的分數(2/6變爲1/3,等)

def simplify(self): 
     div = gcd(self.numerator, self.denominator) 
     self.numerator //= div 
     self.denominator //= div 

我目前解決這一問題的是如下:

def convert(fraction): 
    if fraction.denominator == 1: 
     return fraction.numerator # int 
    else: 
     return fraction   # Fraction 


f = Fraction(3, 1) 
f = convert(f) 

我在各種代數表達式中使用這些分數,所以我希望它們儘可能簡單。例如。 1/2 + 1/2 = 1(而不是1/1)

有沒有什麼辦法可以將Fraction對象轉換爲int而無需每次都通過這個外部函數?

感謝

+0

即使這是可能的,我不認爲這會被推薦。我可以看到動態改變一個對象的類型,使代碼難以推理。然而'convert'返回兩種不同類型的事實並不理想。在使用返回值之前,您不需要進行手動類型檢查嗎? – Carcigenicate

+0

你知道python已經提供了一個Fraction類嗎?它可以幫助你:https://docs.python.org/3.6/library/fractions.html – MiguelSR

+0

是的,也認爲動態改變你的對象的類型是不正確的路要走。 – piiipmatz

回答

1

有幾件事情可以做:

  • 這是不是最佳的有返回兩種不同類型的,所以你可以處理一類方法的轉換功能。
  • 這將)幫助,如果轉化率在打印(支持FUNC以及

考慮到這一點,我剛搬到裏面的類轉換,並增加了一個海峽方法爲好。

from fractions import gcd 

class Fraction: 
    def __init__(self, numerator, denominator): 
     self.numerator = numerator 
     self.denominator = denominator 
     self.simplify() 

    def __str__(self): 
     if self.denominator == 1: 
      return str(self.numerator) 
     return '{}/{}'.format(self.numerator,self.denominator) 

    def simplify(self): 
     div = gcd(self.numerator, self.denominator) 
     self.numerator //= div 
     self.denominator //= div 
    def convert(fraction): 
     if fraction.denominator == 1: 
      return fraction.numerator # int 
     return fraction # Fraction 

if __name__ == '__main__': 
    f = Fraction(6, 2) 
    c = Fraction.convert(f) 
    print(f) 
    print(c) 
    f2 = Fraction(3, 4) 
    print(f2) 

看看它是否可以幫助你。

+0

我同意這樣做不好,有一個函數返回2種類型,這只是爲了看看是否有一個對象轉換它的類是可能的,沒有像這樣的東西附加功能。我可以處理整數和分數,所以也許只是爲了字符串表示而改變它。謝謝您的幫助。 –

相關問題