第二次作業

2022-07-25 02:03:10 字數 4103 閱讀 4322

*類(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萬。他想買這套房子,多大的 率能夠忍受...