類是一個函數包
類中可以放置函數和變量,然后類中的函數可以很方便的使用類中的變量。
類中可以放置函數和變量
def語句定義一個函數,class語句定義一個類。
在類中被定義的函數被稱為類的【方法】,描述的是這個類能做什么。使用類名.函數名()的格式,就可以讓類的方法運行起來。
在類中被定義的變量被稱為類的【屬性】。使用類名.變量名的格式,可以把類中的屬性的值提取出來。
使用類名.變量名的格式,可以讓我們在類的外面,增加或修改類的屬性。
為了讓代碼更直觀,一般會把類中的函數和函數之間換行隔開。
@classmethod是聲明了下面的函數是類方法。
類方法和類屬性可以組合
為了把類中的變量傳遞給類中的函數,我們需要用到3個特定格式:
① 第一個格式@classmethod的中文意思就是“類方法”,@classmethod聲明了函數1是類方法,這樣才能允許函數1使用類屬性中的數據。
② 第二個格式cls的意思是class的縮寫。如果類方法函數1想使用類屬性(也就是類中的變量),就要寫上cls為函數1的第一個參數,也就是把這個類作為參數傳給自己,這樣就能被允許使用類中的數據。
③ 第三個格式是cls.變量。類方法想使用類屬性的時候,需要在這些變量名稱前加上cls.。
注意:當類中的函數【不需要】用到類中的變量時,就不要用@classmethod、cls、cls.三處格式,否則終端會報錯。
給類方法傳參
類方法僅使用外部參數
只使用外部的參數,沒有使用類屬性,格式上不需要@lassmethod和cls。
類方法僅使用內部參數
就是要用上面說的類方法可以與類屬性組合的三個格式
類方法同時使用內部參數和外部參數
# 請直接運行並體驗代碼效果 class 加100類(): 變量 = 100 @classmethod def 加100函數(cls,參數): 總和 = cls.變量 + 參數 print('加100函數計算結果如下:') print(總和) 參數 = int(input('請輸入一個整數:')) 加100類.加100函數(參數)
效果圖
注意:我們要多預設幾個參數位置,以備類方法突然要使用多個外部參數。
增加/修改類屬性
有兩種途徑來增加或修改類屬性。一種是從內部,用類方法去增加/修改;另一種是從外部,用類.變量 = xx直接增加/修改類屬性。
外部增加/修改類屬性
class 類A(): pass 類A.變量1 = 100 print(類A.變量1)
內部增加/修改類屬性
lass 類(): @classmethod def 增加類屬性(cls): cls.變量 = input('請隨意輸入字符串:') 類.增加類屬性() print('打印新增的類屬性:') print(類.變量)
類與對象
以【類】為模板做出來的這些產品就是【類】的【實例化對象】,這個過程叫做【實例化】
類的實例化
實例化前的格式
實例化后的格式
實例屬性和類屬性
增加/修改類屬性實例屬性也會發生變化,但是增加/修改實例屬性,類屬性不會發生變化, 且影響的實例屬性只有那一個。
注意:當修改了實例屬性之后,修改對應的類屬性也不會影響該實例屬性了。
實例方法和類方法
重寫類方法
步驟一:在類的外部寫一個函數。
步驟二:把這個新函數的名字賦值給類.原始函數
注意:不可以重寫實例方法。
初始化函數
class 類(): def __init__(self): print('實例化成功!') 實例 = 類()
效果圖
初始化函數的意思是,當你創建一個實例的時候,這個函數就會被調用。上面的代碼在執行實例 = 類()的語句時,就自動調用了__init__(self)函數。
__init__()的括號中,第一個參數一定要寫上self,不然會報錯。
初始化函數也可以傳遞參數。
類的繼承
數據流轉圖
注意:子類的方法可以替換父類的方法(也就是重新定義)
多重繼承:一個子類從【多個父類】中繼承類方法。格式是class 子類(父類1,父類2,……)。