*類(class): 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項。
*類變數:類變數在整個例項化的物件中是公用的。類變數定義在類中且在函式體之外。類變數通常不作為例項變數使用。
*資料成員:類變數或者例項變數用於處理類及其例項物件的相關的資料。
*方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
*例項變數:定義在方法中的變數,只作用於當前例項的類。
*物件:通過類定義的資料結構例項。物件包括兩個資料成員(類變數和例項變數)和方法。
*例項化:建立乙個類的例項,類的具體物件。
*繼承:即乙個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把乙個派生類的物件作為乙個基類物件對待。
1.建立類
*使用class語句來建立乙個新類,class之後為類的名稱並以冒號結尾
class classname:
'類的幫助資訊' #類文件字串
class_suite #類體
2.建立例項物件
*例項化類其他程式語言中一般用關鍵字 new,但是在 python 中並沒有這個關鍵字,類的例項化類似函式呼叫方式。
使用類的名稱 employee 來例項化,並通過init方法接受引數。
"建立 employee 類的第乙個物件"
emp1 = employee("zara", 2000)
"建立 employee 類的第二個物件"
emp2 = employee("manni", 5000)
3.訪問屬性
*您可以使用點(.)來訪問物件的屬性。使用如下類的名稱訪問類變數:
emp1.displayemployee()
emp2.displayemployee()
print "total employee %d" % employee.empcount
4.類的繼承
*物件導向的程式設計帶來的主要好處之一是**的重用,實現這種重用的方法之一是通過繼承機制。繼承完全可以理解成類之間的型別和子型別關係。
1:在繼承中基類的構造(init()方法)不會被自動呼叫,它需要在其派生類的構造中親自專門呼叫。
2:在呼叫基類的方法時,需要加上基類的類名字首,且需要帶上self引數變數。區別於在類中呼叫普通函式時並不需要帶上self引數
3:python總是首先查詢對應型別的方法,如果它不能在派生類中找到對應的方法,它才開始到基類中逐個查詢。(先在本類中查詢呼叫的方法,找不到才去基類中找)。
如果在繼承元組中列了乙個以上的類,那麼它就被稱作"多重繼承" 。
語法:*派生類的宣告,與他們的父類類似,繼承的基類列表跟在類名之後
class subclassname (parentclass1[, parentclass2, ...]):
'optional class documentation string'
class_suite
5.方法重寫
*如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法:
#!/usr/bin/python
# -*- coding: utf-8 -*-
class parent: # 定義父類
def mymethod(self):
print '呼叫父類方法'
class child(parent): # 定義子類
def mymethod(self):
print '呼叫子類方法'
c = child() # 子類例項
c.mymethod() # 子類呼叫重寫方法
輸出結果為:呼叫子類方法
1.什麼是異常?
*異常即是乙個事件,該事件會在程式執行過程中發生,影響了程式的正常執行。
*一般情況下,在python無法正常處理程式時就會發生乙個異常。
*異常是python物件,表示乙個錯誤。
*當python指令碼發生異常時我們需要捕獲處理它,否則程式會終止執行。
2.異常處理
*捕捉異常可以使用try/except語句。
*try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常資訊並處理。
*如果你不想在異常發生時結束你的程式,只需在try裡捕獲它。
乙個作比較例子,它開啟乙個檔案,在該檔案中的內容寫入內容,且並未發生異常:
try:
fh = open("testfile", "w")
fh.write("這是乙個測試檔案,用於測試異常!!")
except ioerror:
print "error: 沒有找到檔案或讀取檔案失敗"
else:
print "內容寫入檔案成功"
fh.close()
程式輸出結果:
$ python test.py
內容寫入檔案成功
$ cat testfile
這是乙個測試檔案,用於測試異常!!
try:
fh = open("testfile", "w")
fh.write("這是乙個測試檔案,用於測試異常!!")
except ioerror:
print "error: 沒有找到檔案或讀取檔案失敗"
else:
print "內容寫入檔案成功"
fh.close()
程式輸出結果:
$ python test.py
error: 沒有找到檔案或讀取檔案失敗
1.python 模組
*python 模組(module),是乙個 python 檔案,以 .py 結尾,包含了 python 物件定義和python語句。
*模組讓你能夠有邏輯地組織你的 python **段。
*把相關的**分配到乙個模組裡能讓你的**更好用,更易懂。
*模組能定義函式,類和變數,模組裡也能包含可執行的**。
例子support.py 模組:
def print_func( par ):
print "hello : ", par
return
2.import 語句
*模組的引入
*模組定義好後,我們可以使用 import 語句來引入模組
import module1[, module2[,... modulen]
*當直譯器遇到 import 語句,如果模組在當前的搜尋路徑就會被匯入。
*搜尋路徑是乙個直譯器會先進行搜尋的所有目錄的列表。如想要匯入模組 support.py,需要把命令放在指令碼的頂端:
test.py 檔案**:
# 匯入模組
import support
# 現在可以呼叫模組裡包含的函式了
support.print_func("runoob")
輸出結果:
hello : runoob
*乙個模組只會被匯入一次,不管你執行了多少次import。這樣可以防止匯入模組被一遍又一遍地執行。
3.from…import 語句
python 的 from 語句讓你從模組中匯入乙個指定的部分到當前命名空間中。
from modname import name1[, name2[, ... namen]]
3,globals() 和 locals() 函式
*根據呼叫地方的不同,globals() 和 locals() 函式可被用來返回全域性和區域性命名空間裡的名字。
*如果在函式內部呼叫 locals(),返回的是所有能在該函式裡訪問的命名。
*如果在函式內部呼叫 globals(),返回的是所有在該函式裡能訪問的全域性名字。
*兩個函式的返回型別都是字典。所以名字們能用 keys() 函式摘取。
第二次作業
execise02 1.查詢85年以後出生的學生姓名 性別和出生日期 2.列表顯示所有可能的學生選課組合 學號 課程號 3.查詢1 2 4班中陳姓同學的資訊 4.查詢所有及格的學生姓名 所選課程名及所得分數 5.統計各門課程的及格人數 課程編號 課程名 及格人數 6.統計各門課程的總人數 及格人數和...
第二次作業
第一題 p1 1 遞迴寫法,效率低 include 1.寫乙個函式返回引數值為1的個數 比如 15 0000 1111 4個1 程式原型 int count one bits unsigned int value int fuc int x else return 0 void mainp1 p1 ...
第二次作業
檔名稱 516.cpp 作 者 闕文榮 完成日期 2016 年 3 月 11 日 版 本 號 v1.1 對任務及求解方法的描述部分 用while語句控制輸出 輸入描述 略 問題描述 現在北京有一套房子,200萬,假設房價每年 10 乙個軟體工程師每年固定能賺40萬。他想買這套房子,多大的 率能夠忍受...