文章目錄
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