1. 程式人生 > 其它 >class傳參 python_Python 類與物件

class傳參 python_Python 類與物件

技術標籤:class傳參 python

我們今天就一起聊一聊Python中類與物件的那些事兒~

本文共2473個字,閱讀時長7分鐘,建議先收藏後觀看。

一、類與物件

1. 什麼是物件(Object)

527b238e1734d4e8c137d8d46f3445b9.png

何謂物件???

你的小女朋友是你的物件,你的小男朋友也是你的物件(男男女女也成立(咳!咳!))。哲學一點來說,萬物皆物件,來敲個重點,只要是客觀存在的事物都是物件。

面向物件程式設計(Object Oriented Programming):正是一種以物件為中心的程式設計思想,它在軟體設計、資料庫設計、網路結構設計、人工智慧演算法等領域有著非常廣泛的應用。

2.什麼是類(Class)

舉個簡單的例子:大學表白牆找物件的公告寫了一些條件:“180cm以上的男生,會打網球,學習好,陽光帥氣...”。

0ae466848f10f00b05649ffb418e36de.png

那麼正巧一個名叫手冢國光的男孩具備這些條件,這個手冢國光是客觀存在的一個人,他就是物件(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('電腦正在開機中……')#方法具體執行過程:即定義“能做什麼”。

注:

  1. 在類中賦值的變數叫做屬性,類中定義的函式叫做方法(以此區別普通函式)
  2. 例項方法是指類中帶self的函式,是類方法的一種形式,最是最常用的用法。
  3. 例項方法的建立語句,和函式的定義語句很類似,唯一不同的是:例項方法中有個必須放在首位的引數self。
  4. 類名的首字母要大寫,以便讓我們輕鬆地辨認出“哦!這個是類!”

來個例子:建立一個“中國人”的類,併為其建立一個屬性和一個方法。

# 類名首字母大寫
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
吃飯,主食是大米。


類的創建於呼叫三部曲:建立一個類 —— 類的例項化 —— 用例項呼叫類的屬性和方法。

a6f052c10243d50358391a6bc6e20539.png

三、建立類的兩個關鍵點

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()



終端顯示
真小凡寫出了文字
真小凡遇見了你們

很好理解的一個方法:

記住初始化建構函式會自動執行,它可以幫我們快速的把一些屬性繫結到例項物件上。

輔助理解:

  1. 類可以看成模板,模板的特性:擁有通用的基本屬性+基本方法
  2. 例項化就是根據從通用基礎模板生成的單獨個體,因為模板需要多次利用所以每次實際應用的是例項出來的例項物件,當然例項物件可以利用類裡面的屬性跟方法,但是例項物件之間都是互相獨立的。
  3. 加了self的都是涉及到例項物件,初始化建構函式,可以簡單理解為快速複製貼上並且進行小修改的操作。

本人後續會持續在知乎更新,小夥伴們點個贊,按個關注唄,筆芯 @真小凡 。