python3 面向物件程式設計,錯誤以及異常處理
類與例項
類是抽象的模板,例項是根據類創建出來的一個個具體的“物件”;
術語解釋
類(Class): 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項。 方法:類中定義的函式。 類變數:類變數在整個例項化的物件中是公用的。類變數定義在類中且在函式體之外。類變數通常不作為例項變數使用。 資料成員:類變數或者例項變數用於處理類及其例項物件的相關的資料。 方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。 例項變數:定義在方法中的變數,只作用於當前例項的類。 繼承:即一個派生類(derived class)繼承基類(base class)的欄位和方法。繼承也允許把一個派生類的物件作為一個基類物件對待。例如,有這樣一個設計:一個Dog型別的物件派生自Animal類,這是模擬"是一個(is-a)"關係(例圖,Dog是一個Animal)。 例項化:建立一個類的例項,類的具體物件。 物件:通過類定義的資料結構例項。物件包括兩個資料成員(類變數和例項變數)和方法
定義類
class Student(object):
pass
#類通常是以大寫字母開頭,object表示該類是從那個類繼承下來的(如果最上面的類找不到繼承直接寫object即可)
類的初始化
(_ init )方法的第一個引數永遠是self,表示建立的例項本身,因此,在 init _方法內部,就可以把各種屬性繫結到self。
class Int: def __init__(self, a, b): #self代表例項 self.r = a self.i = b x = Complex(3, 4) #例項化物件是需要傳遞兩個引數 print(x.r, x.i) 輸出結果:3 4
類物件
類物件支援兩種操作:屬性引用和例項化
#定義Student類:
class Student:
id = 123
def f(self):
return 'hello world'
#例項化類
x = Student()
#訪問類的屬性和方法:
print("student的屬性:",x.id)
print("student的方法:",x.f())
輸出結果:
student的屬性: 123
student的方法: hello world
類的方法
在類地內部,使用def關鍵字可以為類定義一個方法,與一般函式定義不同,類方法必須包含引數self,且為第一個引數:
class Student:
#定義基本屬性
name = ''
age = 0
#設定訪問限制:定義私有屬性,私有屬性在類外部無法直接進行訪問
__weight = 0
#定義構造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 說: 我 %d 歲。" %(self.name,self.age))
# 例項化類
p = people('xiaoming',10,30)
p.speak()
輸出結果:
xiaoming 說: 我 10 歲。
類的繼承:單繼承和多繼承
class Student:
name = ''
age = 0
__weight = 0
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 說: 我 %d 歲。" %(self.name,self.age))
#單繼承
class people(Student):
grade = ''
def __init__(self,n,a,w,g):
#呼叫父類的構函
Student.__init__(self,n,a,w)
self.grade = g
#覆寫父類的方法
def speak(self):
print("%s 說: 我 %d 歲了,我在讀 %d 年級"%(self.name,self.age,self.grade))
#多重繼承準備
class speaker():
topic = ''
name = ''
def __init__(self,n,t):
self.name = n
self.topic = t
def speak(self):
print("我叫 %s,我是一個演說家,我演講的主題是 %s"%(self.name,self.topic))
#多重繼承
class sample(speaker,people):
a =''
def __init__(self,n,a,w,g,t):
people.__init__(self,n,a,w,g)
speaker.__init__(self,n,t)
test = sample("Tim",25,80,4,"Python")
print(test.speak()) #方法名同,預設呼叫的是在括號中排前地父類的方法
輸出結果:
我叫 Tim,我是一個演說家,我演講的主題是 Python
類的專有方法
__init__ : 建構函式,在生成物件時呼叫
__del__ : 解構函式,釋放物件時使用
__repr__ : 列印,轉換
__setitem__ : 按照索引賦值
__getitem__: 按照索引獲取值
__len__: 獲得長度
__cmp__: 比較運算
__call__: 函式呼叫
__add__: 加運算
__sub__: 減運算
__mul__: 乘運算
__div__: 除運算
__mod__: 求餘運算
__pow__: 乘方
錯誤和異常處理
Python有兩種錯誤很容易辨認:語法錯誤和異常 在執行Python程式的時候,即便語法正確,也有可能發生錯誤。執行期檢測到的錯誤被稱為異常。
異常處理
try語句按照如下方式工作; 首先,執行try子句(在關鍵字try和關鍵字except之間的語句) 如果沒有異常發生,忽略except子句,try子句執行後結束。 如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分將被忽略。如果異常的型別和 except 之後的名稱相符,那麼對應的except子句將被執行。最後執行 try 語句之後的程式碼。 如果一個異常沒有與任何的except匹配,那麼這個異常將會傳遞給上層的try中。
###一個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多隻有一個分支會被執行;
###except子句可以同時處理多個異常,這些異常將被放在一個括號裡成為一個元組;
###try except 語句還有一個可選的else子句,如果使用這個子句,那麼必須放在所有的except子句之後。這個子句將在try子句沒有發生任何異常的時候執行;
import sys
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except OSError as err:
print("OS error: {0}".format(err))
except (RuntimeError, TypeError, NameError):
print("Could not convert data to an integer.")
else:
print('ok !')
f.close()
異常丟擲
raise 唯一的一個引數指定了要被丟擲的異常。它必須是一個異常的例項或者是異常的類;
這裡寫程式碼片
重點內容
參考文章: 廖雪峰,菜鳥教程,w3cschool教程