python之類型轉換

普通的數據可以強制轉換數據類型,比如

>>>a = 3.2
>>>int(a)
3
>>>b = 8
>>>float(b)
8.0

那麼分數能進行數據類型轉換嗎?可以的。因爲我們學過python中的特殊方法__xx__, 在使用python中沒有的功能時,系統會自動調用該功能對應的特殊方法,達到同樣的效果。我們以有理數中分數的四則運算爲例子,進行對應的int,float的數據類型轉換。

def gcd(a, b):   #求a,b的最大公約數
    if(b == 0):
        return a
    return gcd(b, a%b)
class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q
    def __add__(self, r):   #加
        return Rational(self.p * r.q + r.p * self.q, self.q * r.q)
    def __sub__(self, r):   #減
        return Rational(self.p * r.q - self.q * r.p, self.q * r.q)
    def __mul__(self, r):   #乘
        return Rational(self.p * r.p, self.q * r.q)
    def __div__(self, r):   #除
        return Rational(self.p * r.q, self.q * r.p)
    def __str__(self):
        c = gcd(self.p, self.q)
        return '%s/%s' % (self.p/c, self.q/c)   #輸出最簡分數
    __repr__ = __str__
    def __int__(self):   #轉換成int類型
        return self.p/self.q
    def __float__(self):   #轉換成float類型
        return (self.p * 1.0 / self.q)
    
r1 = Rational(1, 2)
r2 = Rational(1, 3)
r3 = Rational(6, 5)
print r1+r2, r1-r2, r1*r2, r1/r2
==> 5/6 1/6 1/6 3/2
print int(r3)
print float(r1), float(r2), float(r3)
==> 1
==> 0.5 0.333333333333 1.2

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章