獨家專訪騰訊雲CTO王慧星:雲技術變革上下二十年
匯入
——Python面向物件基礎
Python從設計之初就已經是一門面向物件的語言,正因為如此,在Python中建立一個類和物件是很容易的。本章節我們將詳細介紹Python的面向物件程式設計。
面向物件介紹
面向過程:根據業務邏輯從上到下寫程式碼
函式式:將某功能程式碼封裝到函式中,日後便無需重複編寫,僅呼叫函式即可
面向物件程式設計:將資料與函式繫結到一起,進行封裝,這樣能夠更快速的開發程式,減少了重複程式碼的重寫過程
面向過程程式設計與函數語言程式設計對比
面向過程的關注點是: 怎麼做
面向物件的關注點是: 誰來做
面向物件:按人們認識客觀世界的系統思維方式,採用基於物件(實體) 的概念建立模型,模擬客觀世界分析、設 計、實現軟體的辦法。
面向物件程式設計**(Object Oriented Programming-OOP)**是一種解決軟體複用的設計和程式設計方法。這種方法把軟體系統中相近相似的操作邏輯和操作 應用資料、狀態,以類的形式描述出來,以物件例項的形式在軟體系統中複用,以達到提高軟體開發效率的作用。
類和物件的概念
類和物件是面向物件程式設計中重要的概念
類就是一個模板,模板裡可以包含多個函式,函式裡實現一些功能
物件則是根據模板建立的例項,通過例項物件可以執行類中的函式
類的組成部分
類(Class)由3個部分構成
類的名稱: 類名
類的屬性: 一組資料
類的方法: 允許對進行操作的方法 (行為)
例如:建立一個人類
事物名稱(類名):人(Person)
屬性:身高(height)、年齡(age)
方法:吃(eat),跑(run)…
定義類和物件
建立類
class Person(object): name='小明' age=18 def eat(self): print('吃飯')
建立物件
物件名=類名()
例子
class Person(object): name='小明' age=18 def eat(self): print('吃飯') def run(self): print('跑步') xm =Person() # 建立物件 xm.eat() # 呼叫方法 print('{}的年齡是:{}'.format(xm.name,xm.age)) # 訪問類屬性
---------------------------------輸出結果-------------------------------
吃飯
小明的年齡是:18
例項方法
在類的內部,使用 def 關鍵字可以定義一個例項方法,與一般函式定義不同,類方法必須包含引數 self,且為第一個引數
例項方法與屬性
類裡面定義的變數。定義在類裡面,方法外面的屬性稱之為類屬性,定義在方法裡面使用self引用的屬性稱之為例項屬性
class Animal(object): colour='白色' # 類屬性 def __int__(self): self.name='旺財' #例項屬性 ''' 例項方法,使用def關鍵字定義,第一個形參預設傳例項物件本身 一般使用self作為第一個引數 ''' def test(self): print('我是例項方法') def show(self): print('Animal.show')
__init__方法
建立一個Animal類,並例項化一個dog物件和cat物件。
init(self) 方法,初始化方法,例項化物件的時候自動呼叫,完成一些初始化設定。
如果init方法裡面的屬性固定了,每個類創建出來的物件屬性都一樣,這個時候我們是不是考慮將屬性當引數在例項化物件的時候傳進去,讓類更通用
class Animal(object): def eat(self): print('喜歡吃肉') dog=Animal() #建立一個物件 dog.colour='red' #新增屬性 dog.name='旺財' #新增屬性 dog.age='2歲' dog.eat() print(dog.name,dog.colour,dog.age) cat=Animal() #建立一個物件 cat.colour='black' #新增屬性 cat.name='妞妞' #新增屬性 print(cat.name,cat.colour) print('----------------改進-------------------') class Animal(object): def __init__(self): self.name='旺財' self.colour='red' self.age='2歲' def eat(self): print('喜歡吃肉') dog=Animal() #在建立新物件的時候是自動執行的 print(dog.name) dog.name='發財' #新增屬性 dog.age='2歲' dog.eat() print(dog.name,dog.colour,dog.age) print('----------------改進2-------------------') class Animal(object): def __init__(self,name,colour,age): self.name=name self.colour=colour self.age=age def eat(self,food): print(self.name+'喜歡吃:'+food) dog=Animal('旺財','black','2歲') print(dog.name,dog.colour) dog.eat('骨頭') cat=Animal('小花','red','3歲') print(cat.name,cat.colour,cat.age) cat.eat('魚')
---------------------輸出結果-------------------------- 吃飯 小明的年齡是:18 喜歡吃肉 旺財 red 2歲 妞妞 black ----------------改進------------------- 旺財 喜歡吃肉 發財 red 2歲 ----------------改進2------------------- 旺財 black 旺財喜歡吃:骨頭 小花 red 3歲 小花喜歡吃:魚
理解self
self和物件指向同一個記憶體地址,可以認為self就是物件的引用。
class Person: ''' 定義類 ''' def eat(self): ''' 例項方法 :return: ''' print('self={}'.format(id(self))) pass pass xw=Person() print('self=%s'%id(xw)) xw.eat()
-----------------執行結果--------------------- self=1809163727296 self=1809163727296
self傳參問題
所謂的self,可以理解為物件自己,某個物件呼叫其方法時,python直譯器會把這個物件作為第一個引數傳遞給self,所以開發者只需要傳遞後面的引數即可。
print('------------------新增引數--------------------') class Person: ''' 定義類 ''' def eat(self,name,food): ''' 例項方法 :return: ''' print('%s 喜歡吃 %s'%(name,food)) pass pass xw=Person() print('self=%s'%id(xw)) xw.eat('小王','榴蓮')
-----------------輸出結果-------------------- self=2269762334784 小王 喜歡吃 榴蓮
魔術方法
在python中,有一些內建好的特定的方法,方法名是“xxx”,在進行特定的操作時會自動被呼叫,這些方法稱之為魔法方法。
下面介紹幾種常見的魔法方法。
__init__方法:初始化一個類,在建立例項物件為其賦值時使用。
__str__方法:在將物件轉換成字串 str(物件) 測試的時候,列印物件的資訊。
__new__方法:建立並返回一個例項物件,呼叫了一次,就會得到一個物件。
__class__方法:獲得已知物件的類 ( 物件.class)。
__del__方法:物件在程式執行結束後進行物件銷燬的時候呼叫這個方法,來釋放資源。
class Person: ''' 定義類 ''' def __init__(self,name,food): ''' 例項方法 :return: ''' self.name=name self.food=food def __str__(self): return '%s 喜歡吃 %s'%(self.name,self.food) ''' 定義了__str__方法,在列印物件的時候,會執行__str__方法。__str__方法只能return一個字串。 ''' pass xw=Person('小王','榴蓮') print(xw)
-----------------輸出結果-------------------------
小王 喜歡吃 榴蓮
類和物件的概念
類就是一個模板,模板裡可以包含多個函式,函式裡實現一些功能;
物件則是根據模板建立的例項,通過例項物件可以執行類中的函式。
定義類和物件
使用 class 語句來建立一個新類,class 之後為類的名稱並以冒號結尾;
例項化類其他程式語言中一般用關鍵字 new,但是在 Python 中並沒有這個關鍵字,類的例項化類似函式呼叫方式。
例項方法與屬性
在類的內部,使用 def 關鍵字可以定義一個例項方法;
定義在類裡面,方法外面的屬性稱之為類屬性,定義在方法裡面使用self引用的屬性稱之為例項屬性。
__init__方法
構造初始化函式,在建立例項物件為其賦值時使用。
理解self
self和物件指向同一個記憶體地址,self就是物件的引用。
魔法方法
在python中,有一些內建好的特定的方法;
方法名是“xxx”;
在進行特定的操作時會自動被呼叫。