1. 程式人生 > >python資料結構----------抽象資料型別和python類

python資料結構----------抽象資料型別和python類

廢話

最近在看python資料結構的書,第二章是複習python面向物件程式設計,其中提到了python面向物件程式設計的特點(封裝成模組,我的理解就是把跟某一個功能相關的操作都封裝成一個類,對外部需要使用該功能的人來說,只需要呼叫提供的介面 其實就是呼叫這個類,不用關心內部具體是如何實現的)

之前對面向物件程式設計學的就不是很好,現在重新看,發現也沒有那麼難了,,,哈哈哈

實現一個有理數類

先來看一個例子:(關於定義有理數類,包括有理數的定義,這裡是用兩個整數分別表示分子和分母,然後又定義了有理數相關的操作,包括加減乘除等)

另外 對於python中:python語言為所有的運算子(當然也包括算術運算子)都規定了特殊方法名!!!


我的理解就是當你在類中定義相關內部函式比如: –add–(雙下劃綫) 其實就是對應了算術運算子的+操作符~~

python實現

# -*- coding: utf-8 -*-
"""
Created on Mon Jul 30 09:43:41 2018

@author: xuanxuan
"""

class Rational:
    @staticmethod
    def _gcd(m,n):
        if n==0:
            m,n=n,m
        while m!=0:
            m,n=n%m,m
        return
n def __init__(self,num,den): if not isinstance(num,int) or not isinstance(den,int): raise TypeError if den==0: raise ZeroDivisionError sign=1 if num<0: num,sign=-num,-sign if den <0: den,sign=-den,-sign g=Rational._gcd(num,den) self._num=sign*(num//g) self._den=den//g def
num(self):
return self._num def den(self): return self._den def __add__(self,another): num=self._num*another.den()+self._den*another.num() den=self._den*another.den() return Rational(num,den) def __mul__(self,another): return Rational(self._num*another.num(),self._den*another.den()) def __floordiv__(self,another): if another.num()==0: raise ZeroDivisionError return Rational(self._num*another.den(),self._den*another.num()) def __eq__(self,another): return self._num*another.den()==self._den*another.num() def __lt__(self,another): return self._num*another.den()<self._den*another.num() def __str__(self): return str(self._num)+'/'+str(self._den) def print(self): print(self._num,'/',self._den) if __name__=="__main__": x=Rational(2,4) print("the final result is",Rational(4,5)+x)

筆記

[email protected] 是在非例項方法之前定義,區別於類中定義的其他例項方法,該非例項方法又稱為靜態方法,主要是作為一個區域性函式來使用,為類中其他的例項方法打輔助的,哈哈哈哈‘

2.其實可以發現類中有兩種型別的變數,self.num和num 前者是在整個類中使用的,作為某一個例項物件的變數在類中使用,而num變數其實就是類似於中間變數,為類中其他函式或變數服務的,,,他們之間的區別就好像例項方法和靜態方法的區別,不知道理解的對不對~~~