普通的數據可以強制轉換數據類型,比如
>>>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