類與對象
類與對象
類:
是一組相關屬性和行為的集合。可以看成是一類事物的模板,使用事物的屬性特徵和行為特徵來描述該 類事物。
舉例:貓。
屬性:名字、體重、年齡、顏色。 行為:走、跑、叫。
對象:
類的具體體現,實現。
舉例:一隻小貓。
屬性:tom、5kg、2 years、yellow。 行為:溜牆根走、蹦躂的跑、喵喵叫。
類與對象的關係
- 類是對一類事物的描述,是抽象的。
- 對象是一類事物的實例,是具體的。
- 類是對象的模板,對象是類的實體。
- 對象是根據類來創建的,類中有什麼對象就有什麼
舉例:當我們提到手機的時候,我們就能想到手機它能夠,打電話、聽電話、看影片、看圖片、聽音樂、發資訊等基礎功能。
但是,我們並不能知道這個手機是什麼顏色、品牌、價格等具體實物,這就是類
使用紅色的5000元的華為手機,打著電話,那這個手機就是一個對象。
Python中一切皆對象。
1.類的創建
- 創建語法
-
#類的創建 ''' 注意:類名的首字母需要大寫,類名也可使用多個單片語成,但是,每個單詞的首字母都要大寫 請遵循這個規範 ''' class Student: #使用class關鍵字創建了Student這個類 pass #Python中一切皆對象,那麼這個Student是對象嗎?記憶體有開闢空間嗎? print(id(Student)) #查看是否開闢空間及其記憶體地址 1872433931728 print(type(Student)) #查看Student的數據類型 <class 'type'> print(Student) #查看Student的值 <class '__main__.Student'>
-
- 類的組成
- 類的屬性:類中方法外的變數稱為類屬性,被該類的所有對象共享
- 實例方法
- 靜態方法:使用類名直接訪問
- 類方法:使用類名直接訪問
-
class Student: native_pace = "中國" #在類裡面定義的變數,稱為類屬性 #構造方法__init__(self): 當創建對象時,系統會自動調用該方法,從而實現對對象進行初始化 def __init__(self,name,age): self.name = name self.age = age #實例方法 在類之外定義的叫做函數,在類裡面定義的叫做方法 def eat(self): #實例方法必須傳遞一個形參self,可其他名字 print("學生在吃飯") # 使用staticmethod關鍵字定義靜態方法 @staticmethod def fun(): #靜態方法不傳遞任何參數 print("使用了staticmethod進行修飾,所以我是靜態方法") #使用classmethod關鍵字定義類方法 @classmethod def cm(cls): #類方法必須傳遞一個形參cls(即class),可其他名字 print("使用了classmethod進行修飾,所以我是類方法")
2.對象的創建
- 創建類和對象
class Student: native_pace = "中國" #在類裡面定義的變數,稱為類屬性 #構造方法__init__(self): 當創建對象時,系統會自動調用該方法,從而實現對對象進行初始化 def __init__(self,name,age): self.name = name self.age = age #實例方法 在類之外定義的叫做函數,在類裡面定義的叫做方法 def eat(self): #實例方法必須傳遞一個形參self,可其他名字 print("學生在吃飯") # 使用staticmethod關鍵字定義靜態方法 @staticmethod def fun(): #靜態方法不傳遞任何參數 print("使用了staticmethod進行修飾,所以我是靜態方法") #使用classmethod關鍵字定義類方法 @classmethod def cm(cls): #類方法必須傳遞一個形參cls,可其他名字 print("使用了classmethod進行修飾,所以我是類方法") student_1 = Student("張三",20) print(id(student_1)) #查看student_1實例對象的空間地址 1229230570848(10進位)--->0x0000011E33D9FD60(16進位) print(type(student_1)) #查看student_1的數據類型 <class '__main__.Student'> print(student_1) #查看student_1實例對象的值 0x0000011E33D9FD60 可以看出實際輸出的是記憶體地址
- 對象使用類的屬性和方法
-
student_1 = Student("張三",18) print(student_1.age) #18 print(student_1.name) #張三 print(student_1.native_pace) #中國 student_1.fun() #使用了staticmethod進行修飾,所以我是靜態方法 student_1.eat() #張三 學生在吃飯 student_1.cm() #使用了classmethod進行修飾,所以我是類方法 #使用類名調用方法 Student.eat(student_1) #張三 學生在吃飯 #類方法的使用方法 Student.cm() #靜態方法的使用方法 Student.fun()
-
- self參數:
- 類的所有方法都必須至少有一個名為self的參數,並且必須是方法的第一個參數。
- 如果把類比作製造汽車的圖紙,那麼由實例化的對象才是正真可以開的汽車。根據一張圖紙可以設計出千千萬萬的汽車,他們長得都差不多,但是它們都有不同的屬性,如顏色不同、內飾不同、所以self就相當於每輛車的編號,有了self,就可以輕輕鬆鬆找到對應的車了。
- 在Python中,由同一個類可以生成無數個對象,當一個對象的方法被調用時,對象會將自身的引用作為第一個參數傳遞給該方法,那麼Python就知道需要操作哪個對象的方法了。
3.動態綁定屬性和方法
#為對象stu_1動態綁定屬性gender stu_1.gender = "女" print(stu_1.gender) #print(stu_2.gender) #報錯,因為實例化對象stu_2並沒有屬性gender #為對象stu_1動態綁定函數,注意:show函數要提前定義好,否則在賦值時,會拋出異常 def show(): print("這是一個被",stu_1,"綁定的show函數") stu_1.show = show stu_1.show() #stu_2.show() #此處程式碼報錯,因為對象str_2並沒有綁定show函數