python學習筆記(四)模塊、面向對象

import關鍵字可以將一個python代碼文件引入當前文件,其作用類似於c++中的include,這個被引入的代碼文件被稱爲模塊(Module)。
from XX import XX是指從一個包中引入某個模塊。包(Package)相當於一個目錄,但和一般文件目錄不同的是,其中必須有一個名爲__init__.py的文件,其內容可以爲空。import後是模塊名,也可以寫*,代表引入該包中的所有模塊。

開始

前兩次可以看出python支持面向過程編程以及函數式編程,而一般現代語言都支持面向對象編程,python也不例外。
面向對象的核心思想是數據與方法的結合。數據和方法都存儲在一個數據類型之中。就像之前使用的list類型,append是其方法,表中的變量是其數據。我們可以自己定義一個類型。
1. 創建一個類的方法:

class window(object):
    def __init__(self,name):
        self.name = name
        self.__get_ct = 0
    def print_name(self):
        print self.name
        self.__get_ct = self.__get_ct+1
    def get_count(self):
        return self.__get_ct

其中object代表其繼承的類,是python中所有類型的基類,繼承關係稍後說。__init__ 是構造函數,print_name,get_count是成員函數。
在定義類成員函數時,第一個參數必須爲self,代表調用這個函數的對象。取用對象的成員變量也要通過self來取得,這一點類似於C++中隱式傳入的this指針,只是在python中這個參數變爲顯示傳遞。

2 . 私有成員和共有成員
私有的成員即只能在其內部進行訪問,在類型的外部是不能訪問的。如上代碼中的__get_ct就是一個私有成員變量。
聲明私有的方法是在變量前加雙下劃線。一般python中的變量不要隨意加下劃線,否則容易和一些關鍵詞重複。

3 . 繼承
繼承即從另外一個類中取得成員,減少成員重複。

class game_wind(window):
    def __init__(self):
        self.name = 'fgo'
        self.__get_ct = 0
    def print_name(self):
        print self.__get_ct#can not use get_count()
        print'game wind:',self.name

在繼承時,如果沒有在構造函數中調用父類的構造函數的話,是不能使用父類的成員變量和函數的。
上面要使用get_count,需要在__init__中加一句

window.__init__(self,'fgo')

4 . 多態
多態指的是同一個變量在不同狀態下表現出的差異。

class text_wind(window):
    def print_name(self):
        print self.get_count()
        print'text wind:',self.name
def prt(obj):
    obj.print_name()
w1 = window('usr')
w2 = game_wind()
w3 = text_wind('python')
prt(w1)
prt(w2)
prt(w3)

運行後會發現該函數會根據類型調用不同的print_name函數。這就是多態性。

一點例子

Tkinter是python自帶的一個GUI庫,可以用來做圖形界面。
使用它創建窗口的一個方法是繼承其Frame類,再通過自建的類來操作:


from Tkinter import *
class Application(Frame):
    def __init__(self,master = None):
        Frame.__init__(self,master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.helloLabel = Label(self,text = 'Hello')
        self.helloLabel.pack()
        self.quitButton = Button(self,text = 'ok',command=self.quit)
        self.quitButton.pack()
app = Application()
app.master.title('helloworld')
app.mainloop()  

參考資料:
廖雪峯python教程:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820044406b227b3e751cc4d5190420d17a2dc6353000

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