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...