1. 程式人生 > >21、面向對象

21、面向對象

tar 面向對象 c程序 rec class 封裝 get 大寫 width

面向對象

類和對象

  • 面向過程和面向對象的編程
    • 面向過程的編程:函數式編程,C程序等
    • 面向對象的編程:C++,Java,Python等
  • 類和對象:是面向對象中的兩個重要概念
    • 類:是對事物的抽象,比如:汽車模型
    • 對象:是類的一個實例,比如:QQ轎車,大客車
  • 範例說明
    • 汽車模型可以對汽車的特征和行為進行抽象,然後可以實例化一臺真實的汽車實體出來

Python類定義

  • Python類的定義
    • 使用class關鍵字定義一個類,並且類名的首字母要大寫
    • 當程序員需要創建的類型不能用簡單類型表示時就需要創建類
    • 類把需要的變量和函數組合在一起,這種包含也稱之為“封裝”
  • Python類的結構

    class 類名:
        成員變量
        成員函數
    
    class MyClass():
        first = 123
        def fun(self):
            print "I am function"    
  • 對象的創建
    • 創建對象的過程稱之為實例化;當一個對象被創建後,包含三個方面的特性:對象的句柄、屬性和方法。
      • 句柄用於區分不同的對象
      • 對象的屬性和方法與類中的成員變量和成員函數對應

        if __name__ == "__main__":
            myClass = MyClass()     #創建類的一個實例
  • 構造函數__init__

    class Person:
        def __init__(self, name, lang, website):
            self.name = name
            self.lang = lang
            self.website = website
  • self是一個很神奇的參數
    • self指向類的一個實例,當實例調用方法時,self就指向這個調用的方法的實例
  • 子類、父類和繼承

    # 抽象形狀類
    class Shape:
        # 類的屬性
        edge = 0
        # 構造函數
        def __init__(self, edge):
            self.edge = edge
        # 類的方法
        def getEdge(self):
            return self.edge
        # 抽象方法  
        def getArea(self):
            pass
    
    #三角形類,繼承抽象形狀類
    class Triangle(Shape):
        width = 0
        height = 0
        # 構造函數
        def __init__(self, width, height):
            #調用父類構造函數
            Shape.__init__(self, 3)
            self.width = width
            self.height = height
        #重寫方法
        def getArea(self):
            return self.width * self.height / 2
    
    #四邊形類,繼承抽象形狀類       
    class Rectangle(Shape):
        width = 0
        height = 0
        # 構造函數
        def __init__(self, width, height):
            #調用父類構造函數
            Shape.__init__(self, 4)
            self.width = width
            self.height = height
        #重寫方法
        def getArea(self):
            return self.width * self.height
    
    triangle = Triangle(4,5);
    print triangle.getEdge()
    print triangle.getArea()
    
    rectangle = Rectangle(4,5);
    print rectangle.getEdge()
    print rectangle.getArea()
  • python支持多繼承,但不推薦使用

21、面向對象