Python基礎 第九章 物件導向一

2021-10-09 08:10:05 字數 4177 閱讀 4150

• python是一門物件導向的程式語言

• 所謂物件導向的語言,簡單理解就是語言中的所有操作都是通過物件來進行的

• 面向過程

• 面向過程指將我們的程式分解為乙個乙個步驟,通過對每個步驟的抽象來完成程式

• 這種編寫方式往往只適用於乙個功能,如果要實現別的功能,往往復用性比較低

• 這種程式設計方式符號人類的思維,編寫起來比較容易

• 1.媽媽穿衣服穿鞋出門

• 2.媽媽騎上電動車

• 3.媽媽到超市門口放好電動車

• 4.媽媽買西瓜

• 5.媽媽結賬

• 6.媽媽騎電動車回家

• 7.到家孩子吃西瓜

• 物件導向的程式語言,關注的是物件,而不注重過程,對於物件導向一切皆物件

• 以上方式可以用媽媽給孩子買瓜來解決

• 物件導向的程式設計思想,將所有功能統一儲存到對應的物件中,要使用某個功能,直接找到對應的物件即可

• 這種編碼方式比較容易閱讀,並且易於維護,容易復用。但是編寫的過程中不太符合常規的思維,編寫相對麻煩

• 我們目前學習的都是python的內建物件,但是內建物件並不都能滿足我們的需求,所以我們在開發中經常要自定義一些物件

• 類簡單理解它就是相當於乙個圖紙,在程式彙總我們需要根據類來建立物件。

• 類就是物件的圖紙, 我們也稱物件是類的例項(instance)

語法

class 類名([父類]):

pass

class

myclass

:pass

print

(myclass)

#

• 類也是乙個物件,類就是用來建立物件的物件

class

myclass

:pass

print

(myclass)

# '''

mc是通過myclass建立的物件 mc是myclass的例項

'''mc = myclass(

)print

(mc,

type

(mc)

)# <__main__.myclass object at 0x00000000021d5ef0>

isinstance() 用來檢測乙個類是否是另乙個類的例項返回布林值true或false

'''

isinstance() 用來檢測乙個類是否是另乙個類的例項

'''r =

isinstance

(mc,myclass)

print

(r)# true

• 如果多個物件是通過乙個類建立的,我們稱這些物件是一類物件

class

myclass

:pass

mc = myclass(

)mc2 = myclass(

)mc3 = myclass(

)print

(mc,

type

(mc)

)# <__main__.myclass object at 0x00000000021df080>

print

(mc2,

type

(mc2)

)# <__main__.myclass object at 0x00000000021df048>

print

(mc3,

type

(mc3)

)# <__main__.myclass object at 0x00000000021df0f0>

• 可以像物件中新增變數,物件中的變數稱之為屬性

語法:物件.屬性名 = 屬性值
class

myclass

:pass

mc = myclass(

)mc.name =

'葫蘆娃'

#向物件mc中新增了name變數並賦值位'葫蘆娃'

print

(mc.name)

• 類和物件都是對現實生活中事物的抽象

• 事物包含兩部分

• 1. 資料(屬性)

• 2. 行為(方法)

方法的呼叫:物件.方法名()

方法呼叫和函式呼叫的區別:

函式呼叫,呼叫時有幾個形參,就會傳遞幾個實參。

方法呼叫,預設傳遞乙個引數,所以方法中至少得有乙個形參。

• 在類**塊中,我們可以定義變數和函式

class

person

: name =

'葫蘆娃'

defspeak

(a):

print

('大家加油!!'

)

• 變數會成為該類例項的公共屬性,所有的該例項都可以通過 物件.屬性名的形式訪問

class

person

: name =

'葫蘆娃'

defspeak

(a):

print

('大家加油!!'

)p1 = person(

)print

('類中變數的呼叫 p1.name='

,p1.name)

# 類中變數的呼叫 p1.name= 葫蘆娃

• 函式會成為該類例項的公共方法,所有該類例項都可以通過 物件.方法名的形式訪問

class

person

: name =

'葫蘆娃'

defspeak

(a):

print

('大家加油!!'

)p1 = person(

)''''類中方法的呼叫'''

p1.speak(

)# 大家加油!!

• 類中定義的屬性和方法都是公共的,任何該類例項都可以訪問

• 屬性和方法的查詢流程

• 當我們呼叫乙個物件的屬性時,解析器會現在當前的物件中尋找是否還有該屬性,如果有,則直接返回當前的物件的屬性值。如果沒有,則去當前物件的類物件中去尋找,如果有則返回類物件的屬性值。如果沒有就報錯

• 類物件和例項物件中都可以儲存屬性(方法)

• 如果這個屬性(方法)是所有的例項共享的,則應該將其儲存到類物件中

• 如果這個屬性(方法)是某個例項獨有的。則應該儲存到例項物件中

• 一般情況下,屬性儲存到例項物件中 而方法需要儲存到類物件中

• self在定義時需要定義,但是在呼叫時會自動傳入。

• self的名字並不是規定死的,但是最好還是按照約定用self

• self總是指呼叫時的類的例項

class

person

: name =

'葫蘆娃'

''' 方法呼叫的時候預設傳遞乙個引數,所以方法中至少要定義乙個形參

第乙個引數就是呼叫方法的本身

如果是p1呼叫,則第乙個引數就是p1

如果是p2呼叫,則第乙個引數就是p2

一般我們都會將這個引數命名為self

'''defspeak

(self)

:print

('加油!!%s'

%self.name)

p1 = person(

)p2 = person(

)p1.name =

'鋼鐵俠'

''' p1自己定義了name為'鋼鐵俠',所以就不會去person類理尋找name的值,而卻'鋼鐵俠'為p1獨有

p2未定義name,所以p2呼叫了類中共享的變數name為'葫蘆娃'

'''p1.speak(

)# 加油!!鋼鐵俠

p2.speak(

)# 加油!!葫蘆娃

print

(p1)

# <__main__.person object at 0x00000000021e5ef0>

print

(p2)

# <__main__.person object at 0x00000000021ef080>

c 基礎 (第九章)

結構體型別說明 struct 結構體識別符號 成員變數列表 如果沒有結構體識別符號,則稱為無名結構體型別 引用結構體變數成員 l 結構體變數名.成員名 l 結構體指標名 成員名 l 結構體指標名 成員名 共用體共用體所有變數共用一塊記憶體 定義格式如下 union 共用體識別符號 成員變數列表 列舉...

Python基礎教程(第九章)

新型類 class newstyle object 或者 metaclass type class style 建構函式 init self 子類的建構函式中呼叫父類的建構函式 呼叫未繫結的超類構造方法 呼叫例項的方法時,該方法的self引數被自動繫結到例項上 稱為繫結方法 若呼叫類的方法,就沒有例...

第九章(筆記)

轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...