第9次作業

2022-09-21 03:39:08 字數 2344 閱讀 1725

1. 什麼是類和例項並說明他們之間的關係

類(class):類是乙個抽象的概念,是萬事萬物的抽象,是一類事物的共同特徵的集合。

用計算機語言來描述類,是屬性和方法的集合。

例項or物件(instance、object):例項是類的具象,是乙個實體。

對於我們每個人這個個體,都是抽象概念人類的不同實體。

類和例項的關係

例如:人類和單獨的乙個人,單獨的乙個人是人類的例項,單獨的乙個人有自己的各種資訊如:身高、體重、會的技能和動作等等,這就是例項的屬性,而不同的人有不同的屬性,所以這些屬性不能儲存到人類中,因為人類是抽象概念,不能保留每個具體的個體的值。

2. 類的例項方法、類方法和靜態分別如何定義舉例說明,並總結它們的應用場景

例項方法:是最常見的定義方法的方式。

class person:

def showself(self):

print('普通方法,和自己有關。self={}'.format(self))

在呼叫showself時必須傳入乙個實參

類方法:相對例項方法使用較少

class person:

@classmethod

def class_method(cls):

print('類方法')

print("'s name = ".format(cls))

cls.height = 170 

在類定義中,使用@classmethod裝飾器修飾的方法

在呼叫時必須至少有乙個引數,且第一引數留給了cls,cls指代呼叫者即類物件自身

cls這個識別符號可以是任意合法名稱,但是為了易讀,請不要修改

通過cls可以直接操作類的屬性

通過類、例項都可以非常方便地呼叫類方法。classmethod裝飾器內部將類(或提取例項的類)注入到類方法的第乙個引數中。

靜態方法:用的極少,偶爾在原始碼中見到

class person:

height = 180

@staticmethod

def static_method():

print('靜態方法')

print(person.height)

在類定義中使用@staticmethod裝飾器修飾的方法

呼叫時,不會隱式的傳入引數

通過類、例項都可以呼叫靜態方法,不會像普通方法、類方法那樣注入引數。

靜態方法,只是表明這個方法屬於這個名詞空間。函式歸在一起,方便組織管理。

3. mro是什麼,描述其查詢順序

mro有三個搜尋演算法:

經典演算法,按照定義從左到右,深度優先策略。2.2版本之前

新式類演算法,是經典演算法的公升級,深度優先,重複的只保留最後乙個。2.2版本

c3演算法,在類被建立出來的時候,就計算出乙個mro有序列表。2.3之後支援,python3唯一

支援的演算法

c3演算法解決多繼承的二義性

經典演算法有很大的問題,如果c中有方法覆蓋了a的方法,也不會訪問到c的方法,因為先訪問a的(深度

優先)。

新式類演算法,依然採用了深度優先,解決了重複問題,但是同經典演算法一樣,沒有解決繼承的單調性。

c3演算法,解決了繼承的單調性,它阻止建立之前版本產生二義性的**。求得的mro本質是為了線性

化,且確定了順序。

單調性:假設有a、b、c三個類,c的mro是[c, a, b],那麼c的子類的mro中,a、b的順序一致就是單

調的。4. mixin是什麼,描述其應用場景

mixin本質上就是多繼承實現的。

mixin體現的是一種組合的設計模式。

在物件導向的設計中,乙個複雜的類,往往需要很多功能,而這些功能由來自不同的類提供,這就需要

很多的類組合在一起。

從設計模式的角度來說,多組合,少繼承。

mixin類的使用原則

mixin類中不應該顯式的出現__init__初始化方法

mixin類僅實現單一功能,通常不能獨立工作,因為它是準備混入別的類中的部分功能實現

mixin類是類,也可以繼承,其祖先類也應是mixin類

使用時,mixin類通常在繼承列表的第乙個位置,例如 class printableword(printablemixin,

word): pass

mixin類和裝飾器,都可以實現對類的增強,這兩種方式都可以使用,看個人喜好。

如果還需要繼承就得使用mixin類的方式。

第9次作業

2使用一堆陣列,從鍵盤上接收6個數,找出最大的那個元素並記錄下它的下標。include main double m 6 max int i,flag printf 輸入6個數 n for i 0 i 5 i scanf lf m i max m 0 flag 0 for i 0 i 5 i if m...

C語言第9次作業

1.編寫函式判斷使用者輸入的字元是否是對稱的字串 即順讀和倒讀都一樣的字串 例如 xyzyx 和 xyzzyx 都是對稱的。includeint main else for j a,k b j 0,k i j k if k i 1 printf yes n else printf no.n 2.編寫...

第9周作業

題1 檢視記憶體占用情況 root use01 ps auxh awk sort k 2 t nr head 6595 1.7 6049 1.4 6104 0.8 6097 0.6 6048 0.6 6853 0.5 6733 0.4 6732 0.4 6598 0.4 6596 0.4題2 迴圈p...