class傳參 python_Python 類與物件
技術標籤:class傳參 python
我們今天就一起聊一聊Python中類與物件的那些事兒~
本文共2473個字,閱讀時長7分鐘,建議先收藏後觀看。
一、類與物件
1. 什麼是物件(Object)
何謂物件???
你的小女朋友是你的物件,你的小男朋友也是你的物件(男男女女也成立(咳!咳!))。哲學一點來說,萬物皆物件,來敲個重點,只要是客觀存在的事物都是物件。
面向物件程式設計(Object Oriented Programming):正是一種以物件為中心的程式設計思想,它在軟體設計、資料庫設計、網路結構設計、人工智慧演算法等領域有著非常廣泛的應用。
2.什麼是類(Class)
舉個簡單的例子:大學表白牆找物件的公告寫了一些條件:“180cm以上的男生,會打網球,學習好,陽光帥氣...”。
那麼正巧一個名叫手冢國光的男孩具備這些條件,這個手冢國光是客觀存在的一個人,他就是物件(Object)。
而這些條件可以理解為類(Class),類是確定物件將會擁有的特徵(屬性)和行為(方法),它不是具體客觀存在的東西。
總結一下類的特點:
- 類是物件的型別。
- 類是具有相同屬性和方法的一組物件集合(一個類可對應多個物件)。
怎麼來理解呢?很明顯手冢國光是客觀存在的物件,她具有180cm的特徵(屬性),他會網球,會學習這些行為(方法)這就統稱為類,換句話說可以理解為型別,比如你喜歡什麼型別的女孩兒/男孩兒,他們所具備什麼屬性和行為。
3.物件的屬性
物件的屬性就是物件具備的各種特徵,每個物件的每個屬性都具有特定的值。說人話就是手冢國光這個物件來說她的屬性是“性別 = 男;身高 = 180cm ”這就是物件的屬性。
4.物件的方法
物件的方法就是物件執行的操作,也就是說物件能幹什麼?這就稱為方法。比如手冢國光他的方法就是“學習、打網球”。
5.類與物件的關係和區別
- 類是抽象的概念,僅僅代表事物的模板,比如說“女朋友”、“男朋友”。
- 物件是一個能夠“看得到,摸得著的”具體的實體,比如手冢國光。
二、類的建立跟呼叫:(類的方法均指例項方法)
1.類的建立
來個例子:
#建立電腦類的示例程式碼 class Computer: screen = True def start(self): print('電腦正在開機中……')
電腦類,都有螢幕,所以屬性screen的值為True;開機時會顯示“電腦正在開機中……”。
具體含義:
class Computer: #類的建立:class + 類 + 英文冒號。
screen = True #類的屬性建立:通過賦值語句(即定義“是怎樣的”)。
def start(self):#例項方法的建立:def + 方法名(self)。
print('電腦正在開機中……')#方法具體執行過程:即定義“能做什麼”。
注:
- 在類中賦值的變數叫做屬性,類中定義的函式叫做方法(以此區別普通函式)
- 例項方法是指類中帶self的函式,是類方法的一種形式,最是最常用的用法。
- 例項方法的建立語句,和函式的定義語句很類似,唯一不同的是:例項方法中有個必須放在首位的引數self。
- 類名的首字母要大寫,以便讓我們輕鬆地辨認出“哦!這個是類!”
來個例子:建立一個“中國人”的類,併為其建立一個屬性和一個方法。
# 類名首字母大寫
class Chinese:
# 用賦值語句,建立類的屬性
eye = 'black'
# 建立例項方法時,不要漏了 self
def eat(self):
print('吃飯,主食是大米。')
不過執行程式碼,終端會一片空白,這是因為我們只完成了建立,還沒有呼叫。
2.類的呼叫
來個例子:
class Computer:
screen = True
def start(self):
print('電腦正在開機中……')
my_computer = Computer()
print(my_computer.screen)
my_computer.start()
終端顯示
True
電腦正在開機中……
倒數第二行:my_computer.screen先是獲取到類屬性screen對應的值True,再用print()打印出來。最後一行:my_computer.start()呼叫方法start(),這個方法的功能是直接打印出'電腦正在開機中……'。
有人可能會想:為什麼例項呼叫方法時不用傳參,定義時不是有個引數self嗎?這就是引數self的特殊之處:在定義時不能丟,在呼叫時要忽略。
來個例子:
class Chinese: # 建立一個類
eye = 'black'
def eat(self):
print('吃飯,主食是大米。')
wufeng = Chinese() # 類的例項化
print(wufeng.eye) # 例項呼叫類屬性
wufeng.eat() # 呼叫類中的方法(傳參不用管self)
終端顯示
black
吃飯,主食是大米。
類的創建於呼叫三部曲:建立一個類 —— 類的例項化 —— 用例項呼叫類的屬性和方法。
三、建立類的兩個關鍵點
1.特殊引數:self
正式揭祕特殊引數self的作用:self會接收例項化過程中傳入的資料,當例項物件建立後,例項便會代替 self,在程式碼中執行(self.屬性=屬性,就是把屬性弄到例項物件上)。
換言之,self 是所有例項的替身。
來個例子:
class Name:
def greeting(self):
print('很高興在知乎遇見你')
def say(self):
self.greeting()
print('我是真小凡')
person = Name()# 建立例項person
person.say()# 呼叫say()方法
終端顯示
很高興在知乎遇見你
我是真小凡
當最後一行例項person呼叫say()方法時,便會執行say()內部的語句(第七行開始)。
此時self.greeting()就變成person.greeting(),也就是呼叫例項方法greeting(),打印出'很高興在知乎遇見你',再打印出'我是真小凡'。所以self代表的是類的例項本身,方便資料的流轉。
需要記住兩點:
- 只要在類中用def建立方法時,就必須把第一個引數位置留給 self,並在呼叫方法時忽略它(不用給self傳參)。
- 當在類的方法內部想呼叫類屬性或其他方法時,就要採用self.屬性名或self.方法名的格式。
2.特殊方法:初始化函式定義
初始化方法的格式是def __init__(self),是由init加左右兩邊的【雙】下劃線組成( initialize “初始化”的縮寫)。
初始化方法的作用在於:當每個例項物件建立時,該方法內的程式碼無須呼叫就會自動執行。
來個例子:
class People:
# 初始化方法的建立,init兩邊雙下劃線。
def __init__(self,name,text,you):
self.name = name # self.name = '真小凡'
self.text = text # self.text = '文字'
self.you = you # self.you = '你們'
def write(self):
print(self.name + '寫出了' + self.text)
def meet(self):
print(self.name + '遇見了' + self.you)
person = People('真小凡','文字','你們') # 傳入初始化方法的引數
person.write()
person.meet()
終端顯示
真小凡寫出了文字
真小凡遇見了你們
很好理解的一個方法:
記住初始化建構函式會自動執行,它可以幫我們快速的把一些屬性繫結到例項物件上。
輔助理解:
- 類可以看成模板,模板的特性:擁有通用的基本屬性+基本方法。
- 例項化就是根據從通用基礎模板生成的單獨個體,因為模板需要多次利用所以每次實際應用的是例項出來的例項物件,當然例項物件可以利用類裡面的屬性跟方法,但是例項物件之間都是互相獨立的。
- 加了self的都是涉及到例項物件,初始化建構函式,可以簡單理解為快速複製貼上並且進行小修改的操作。
本人後續會持續在知乎更新,小夥伴們點個贊,按個關注唄,筆芯 @真小凡 。