類與對象

類與對象

類:

是一組相關屬性和行為的集合。可以看成是一類事物的模板,使用事物的屬性特徵和行為特徵來描述該 類事物。

舉例:貓。

 

屬性:名字、體重、年齡、顏色。   行為:走、跑、叫。

 

對象:

類的具體體現,實現。

舉例:一隻小貓。

 

屬性: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函數

 

Tags: