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