python中類、實例化、構造方法、繼承、重寫等概念的整理筆記

python中類、實例化、構造方法、繼承、重寫等概念的整理筆記

一、關於類:

1、類的定義:

定義:定義該集合中每個對象所共有的屬性和方法。
例如:人類可以看作一個類,類有一些屬性和功能,例如人類有名字、身高、體重等屬性,需要定義每個人的屬性值;有說話、走路、喝水等行爲,定義說話、喝水的行爲即爲方法。

class People:
    def __init__(self, voice, name='', high=''):
        self.name = name       # 定義人類的姓名屬性
        self.high = high       # 定義人類的身高屬性
        self.voice = voice

    def say(self):            # 定義人類說話的方法
        print(self.name, self.voice)


if __name__ == '__main__':
    People("小明").say()
    People("Sweet").say()

在這裏插入圖片描述

知識補充

(1)關於靜態屬性:

關於靜態屬性:
位置:在class下邊的直接定義    變量名 = 值    屬於靜態屬性
訪問方法:
1.類名.屬性名訪問
2.類內 self.屬性名
3.實例化的對象名.屬性名訪問
所以實例化的同名類的對象共用一套靜態屬性和靜態方法。
對於私有屬性,也就是在構造函數中self.屬性名定義的,實例化的對象修改自己的屬性後,
不會影響其它的對象,但是靜態屬性一旦被修改,調用該屬性的方法返回的值都會被修改。

class是一個模板,並不存在與內存中,不管創建幾個對象,靜態屬性和方法都只有一套。如圖所示:

在這裏插入圖片描述

 對象是基於Class創建的,Class不佔用內存,只是一套創建規則,
 Class中可以包含佔用內存的靜態屬性和靜態方法,
 所以不論使用那種方法修改類的靜態屬性,
 再次讀取後都會改變,也就是所有對象和類模板共用一套靜態屬性和靜態方法。
 特別注意的是,不同的類名之間的靜態方法和屬性是不共用的。

(2)關於類、方法、靜態屬性、對象的關係圖如下:

在這裏插入圖片描述

(3)靜態方法的調用方法:

1.類名.方法名
2.實例化的對象名.方法名
非靜態方法必須有self:
def speak(self): # 定義人類說話的方法
print(“Chinese”)

2、類的三部分組成:

類由三部分組成:
類的名稱:類名
類的屬性:指對象的特徵(一組數據)
類的方法:允許對象進行操作的方法 (行爲/功能)

3、類對象支持兩種操作:屬性引用 和 實例化。

 屬性引用的語法:obj.屬性
 類實例化的語法:obj = 類名()
 類中方法的調用:obj.方法名()

二、實例化:

定義:類到對象的過程。
實例化的過程:
1、創建一個實例/對象,實例名 = 類名(參數1,參數2)
2、會先調用__init__構造方法,以初始化對象的各屬性,對象默認名字是self(在類內部無法知道對象的名字,self指代對象名)。類的各屬性(成員變量)均可以在構造函數中定義,定義時只要加上對象指針即可。
3、執行完__init__方法之後,會將self所指向的內存空間返回給實例化它的地方

三、構造方法

init(self) 是類的初始化方法,也稱構造方法。
init(self)在實例化後,會自動調用,而不用手動調用,所以一般把屬性設置在_init__()裏。

使用方法一:

class People:
    def __init__(self):
        self.age = 18


if __name__ == '__main__':
    xiao_hong = People()
	print(xiao_hong.age)

# 輸出結果爲:18

使用方法二:
帶參數引用:

class People:
    def __init__(self, value=18):
        self.age = value


if __name__ == '__main__':
    xiao_hong = People()
    print(xiao_hong.age)

子類中重寫了構造方法,將覆蓋父類的構造方法。

四、繼承:

代碼參考https://www.cnblogs.com/bigberg/p/7182741.html
繼承概念的實現方式主要有2類:實現繼承、接口繼承。
實現繼承是指使用基類的屬性和方法而無需額外編碼的能力。
接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實現的能力(子類重構爹類方法)。

1、類的繼承:

class Person(object):   # 定義一個父類
    def talk(self):     # 父類中的方法
        print("talk:hello,hello")

        
class Chinese(Person):    # 定義一個子類, 繼承Person類
    def walk(self):       # 在子類中定義其自身的方法
        print("walk:one,two,three")


if __name__ == '__main__':
    xiao_ming = Chinese()
    xiao_ming.talk()      # 調用繼承的Person類的方法
    xiao_ming.walk()      # 調用本身的方法

在這裏插入圖片描述

2、構造函數的繼承:

1.經典類的寫法: 父類名稱.init(self,參數1,參數2,…)
2. 新式類的寫法:super(子類,self).init(參數1,參數2,…)

class Person(object):

    def __init__(self, name, age, weight):
        self.name = name
        self.age = age
        self.weight = weight


class Chinese(Person):

    def __init__(self, name, age, weight, language):  # 先繼承,在重構
        super(Chinese, self).__init__(name, age, weight)
        self.language = language    # 定義類的本身屬性


if __name__ == '__main__':
    xiao_ming = Chinese("xiaoming", "18", "100", "Chinese")
    print(xiao_ming.name)
    print(xiao_ming.age)
    print(xiao_ming.weight)
    print(xiao_ming.language)

在這裏插入圖片描述

3、子類對父類的重寫

定義:子類包含與父類同名的方法的現象被稱爲方法重寫(Override)。
例如:所有的鳥都有fly()方法,麻雀是鳥類的一種,不具備所有鳥類的fly()方法,麻雀是鳥類的子類,所以要具體麻雀fly()方法,要重寫鳥類的fly()方法。

class Bird:
    def fly(self):        # 定義Bird類的fly()方法
        print("鳥類作爲父類隨意飛翔")


class Small_Bird(Bird):
    def fly(self):        # 重寫Bird類的fly()方法
        print("作爲子類只能低空飛翔")


if __name__ == '__main__':
    bird = Bird()         # 創建鳥類對象
    bird.fly()            # 調用鳥類對象的fly()方法
    Maque = Small_Bird()  # 創建麻雀對象
    Maque.fly()           # 調用麻雀對象的fly()方法

在這裏插入圖片描述

python中的其他定義可參考以下鏈接學習:

python中定義詳細講解https://www.cnblogs.com/LearningOnline/p/8512041.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章