物件導向程式簡單來說就是基於對 類別 和 物件 的使用,所有的程式碼都是透過類別和物件來實現的程式設計就是物件導向程式設計!
物件導向的三大特性:封裝、繼承、多型
先建立一個類別
#使用class创建一个School类,类中有个student方法 class School: def student(self): pass a1=School()
一、封裝
1、封裝:將某些內容先封裝到一個地方,等到需要的時候再去呼叫
class School: def __init__(self,name,age): #构造方法,创建对象是执行 self.name=name self.age=age#创建对象a1,a2a1=School("zhangsan",18) a2=School("lisi",18)
上面程式碼實現的就是封裝的功能,把各自的name和age分別封裝到了self的name和age屬性中,就等於被封裝到了物件a1和a2中
類別中定義的函數叫做方法,帶有__init__的函數稱為建構方法,在建立a1,a2物件時會自動執行。
2、呼叫:呼叫有兩種方式,透過物件直接呼叫和透過self間接呼叫
透過物件直接呼叫
class School: def __init__(self,name,age): self.name=name self.age=age def student(self): print("name:%s,age:%s"%(self.name,self.age))#创建对象a1,a2a1=School("zhangsan",18) a2=School("lisi",18) print a1.name,a1.age print a2.name,a2.age#执行结果: zhangsan 18 lisi 18
透過self間接呼叫
class School: def __init__(self,name,age): self.name=name self.age=age def student(self): print("name:%s,age:%s"%(self.name,self.age)) #创建对象a1,a2 a1=School("zhangsan",18) a2=School("lisi",18) #执行类中的方法时,通过self间接调用被封装的内容 a1.student() a2.student() #执行结果: #name:zhangsan,age:18 #name:lisi,age:18
二、繼承
1、繼承:既衍生類別(子類別)可以繼承基底類別(父類別)的方法,我們可以將多個類別共有的方法提取到父類別當中,這樣子類別只需繼承父類別而不必一一實作每個方法
在類別名稱後面括號中寫上另一個類,表示繼承了那個類別
class School: def __init__(self,name,age): self.name=name self.age=age def student(self): print("name:%s,age:%s"%(self.name,self.age)) def classroom(self): print("%s去教室"%self.name) class SchoolA(School): #SchoolA继承School def __init__(self,name): self.name=name class SchoolB(SchoolA): #SchoolB继承SchoolA def __init__(self,name): self.name=name #创建对象a1 a1=SchoolA("zhangsan") a1.classroom() #创建对象a2 a2=SchoolB("lisi") a2.classroom() #执行结果: # zhangsan去教室 # lisi去教室
在上面程式碼中我們可以看到,在SchoolA和SchoolB中都沒有classroom方法,但由於SchoolB繼承了SchoolA,而SchoolA繼承了School,所以他們在建立物件後都能
呼叫School中的classroom方法。
2、多繼承
在python中,類別還可以繼承多個類,在繼承多個類別時,他對類別中的函數查找有兩種方式
深度優先:類別是經典類別時,多繼承情況下,會按照深度優先方式查找
廣度優先:類別是新式類別時,多繼承情況下,會按照廣度優先方式查找
(在python3.x中)都預設為廣度優先,但還是可以了解一下兩個的區別,新式類別:當前類別或基底類別繼承了objiect類別就叫新式類,否者就是經典類別。
以上是python如何物件導向編程的詳細內容。更多資訊請關注PHP中文網其他相關文章!