日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python程序开发——第六章 类与对象

發(fā)布時間:2024/2/28 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python程序开发——第六章 类与对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 一、類
    • (一)類、對象
    • (二)類的定義
    • (三)對象的創(chuàng)建和使用
  • 二、限制對象訪問
    • (一)定義私有成員、方法
    • (二)訪問私有成員、方法
  • 三、構(gòu)造方法和析構(gòu)方法
    • (一)構(gòu)造方法
    • (二)析構(gòu)方法
  • 四、類方法和靜態(tài)方法
    • (一)類方法
    • (二)靜態(tài)方法
  • 五、繼承
    • (一)多繼承
    • (二)派生類方法重寫
    • (三)super()函數(shù)
  • 六、多態(tài)

一、類

(一)類、對象

Python是一種面向?qū)ο笳Z言,面向?qū)ο笥袃蓚€概念,分別是類和對象。
類是對多個對象的共同特征的抽象描述,可以說類是對象的模板。
對象是類的實例,用于描述現(xiàn)實中的個體。

(二)類的定義

根據(jù)類與對象的關(guān)系,我們知道創(chuàng)建對象之前需先定義類,類中可以定義數(shù)據(jù)成員和成員函數(shù),前者用于描述對象特征,稱為屬性,后者用于描述對象行為,稱為方法,類中的方法的第一個參數(shù)必須為self,這種方法也叫實例方法,只能通過類實例化的對象進(jìn)行調(diào)用。

class 類的名稱屬性名稱=屬性值def 方法名稱(self): #self是一個指向?qū)ο蟮哪J(rèn)參數(shù),類中必須包含參數(shù) self, 且為第一個參數(shù)。方法體

例如,下列代碼定義了一個類,名稱為Way,該類包含一個屬性number_way、一個方法world():

class Way:number_way = 3def world(self):print("hello world!")

(三)對象的創(chuàng)建和使用

創(chuàng)建對象:

對象名稱=類名稱()

訪問對象成員:

對象名稱.屬性 對象名稱.方法()

例如,創(chuàng)建一個Way類的對象a,訪問該對象成員:

class Way:number_way = 3def world(self):print("hello world!")a = Way() print(a.number_way) a.world()

輸出結(jié)果如下:

二、限制對象訪問

(一)定義私有成員、方法

定義類中的屬性和方法默認(rèn)為公有屬性和公有方法,該類中的對象可以任意訪問類中的公有成員和公有方法,可以通過將成員和方法定義為私有,即私有成員和私有方法,從而限制對象對類的訪問。

通過在類成員名稱或類方法名稱前面加上雙下劃線__限制成員的訪問,即定義為私有成員和私有方法,如下:

class Way:__number_way = 3def __world(self):print("hello world!")

(二)訪問私有成員、方法

這里要注意,實例化的對象是無法直接訪問類中的私有成員和私有方法的,它們都可通過公有方法中的參數(shù)self調(diào)用。
例如,下列python代碼,定義了一個私有成員__number_way和一個私有方法__world()以及一個公有方法get_way():

class Way:__number_way = 3def __world(self): # 私有方法print("hello world!")def get_way(self): # 公有方法print(f"number_way的值為:{self.__number_way}") # 私有成員通過公有方法中的指代類本身的默認(rèn)參數(shù)self訪問self.__world() # 私有方法通過公有方法中的指代類本身的默認(rèn)參數(shù)self訪問a = Way() a.get_way()

輸出結(jié)果如下:

三、構(gòu)造方法和析構(gòu)方法

類中有兩個名為 __init__() 和__del__()的特殊方法,它們分別是構(gòu)造方法和析構(gòu)方法,該兩種方法在類創(chuàng)建和銷毀時會自動調(diào)用。

(一)構(gòu)造方法

每個定義的類中都有一個默認(rèn)的__init__()構(gòu)造方法,如果在定義類時未定義,則系統(tǒng)會調(diào)用默認(rèn)的構(gòu)造方法,而如果用戶在定義時顯式地定義了構(gòu)造方法,則會調(diào)用該定義的構(gòu)造方法。

可以通過無參構(gòu)造方法和有參構(gòu)造方法來分別對該方法創(chuàng)建的對象賦予相同的初始值和不同的初始值。

注:這里按照參數(shù)的有無分為兩種構(gòu)造方法,但除了self,因為類中必須包含參數(shù) self, 且為第一個參數(shù)。

下列python代碼,Triangle類中顯式地定義了帶參數(shù)的構(gòu)造方法和一個get_s()方法:

class Triangle:def __init__(self, bottom, high):self.bottom = bottomself.high = highdef get_s(self):s = (self.bottom * self.high) / 2.0print(f"三角形的面積為:{s}")S = Triangle(1.5, 2) print(S.bottom, S.high) S.get_s()

運(yùn)行結(jié)果如下:

(二)析構(gòu)方法

對象被清理時,系統(tǒng)會自動調(diào)用析構(gòu)方法,即對象在內(nèi)存中被釋放時自動觸發(fā)執(zhí)行__del__()析構(gòu)方法。
下列python代碼,Triangle類中顯式地定義了帶參數(shù)的構(gòu)造方法和一個get_s()方法以及一個析構(gòu)方法,析構(gòu)方法打印輸出__del__()方法被調(diào)用:

class Triangle:def __init__(self, bottom, high):self.bottom = bottomself.high = highprint("__init__()方法被調(diào)用")def __del__(self):print("__del__()方法被調(diào)用")def get_s(self):s = (self.bottom * self.high) / 2.0print(f"三角形的面積為:{s}")S = Triangle(1.5, 2) print(S.bottom, S.high)

運(yùn)行結(jié)果如下,可知道對象在被銷毀時自動調(diào)用了__del__()析構(gòu)方法:

四、類方法和靜態(tài)方法

(一)類方法

類方法通過裝飾器@classmethod修飾,它的第一個參數(shù)并非類本身self,而是cls。

與實例方法不一樣,它既可由類實例化的對象調(diào)用,也可由類調(diào)用,且類方法可以修改類屬性,而實例方法不能。
如下代碼,通過對象名稱調(diào)用類方法,直接通過類調(diào)用類方法且通過類方法修改類屬性word的值:

class GetW:word = "hello world!"@classmethoddef print_word(cls):print(f"{cls.word}")cls.word = "HELLO WORLD!" # 類方法修改類屬性的值為HELLO WORLD!A = GetW() # 創(chuàng)建一個GetW類的對象A print("通過類實例化的對象調(diào)用:") A.print_word() print("通過類調(diào)用:") GetW.print_word()

運(yùn)行結(jié)果如下:

(二)靜態(tài)方法

首先靜態(tài)方法與類方法一樣,既可由類實例化的對象調(diào)用,也可由類調(diào)用。靜態(tài)方法沒有self參數(shù),是通過裝飾器@classmethod修飾。

由于沒有默認(rèn)參數(shù),所以它無法使用默認(rèn)參數(shù)來訪問類成員。
下列python代碼:

class Get:number = 0@staticmethoddef print_number():print(f"{Get.number}")A = Get() A.print_number() Get.print_number()

運(yùn)行結(jié)果如下:

五、繼承

類和類可以繼承,繼承(派生)的類的稱為派生類或子類,被繼承的類稱為基類或父類。
由于是繼承下來的,所以派生類具有基類的所有屬性和方法,繼承的格式如下:

class 派生類名稱(基類名稱):

例如,下列python代碼,定義了基類Employee和子類teacher,通過class Teacher(Employee)來繼承基類Employee中的屬性和方法,另外派生類中還有自己定義的屬性和方法:

class Employee:place = "office"def get_word(self):print(f"{self.place}")class Teacher(Employee): # 繼承Employee類student_num = 50 # 子類自己定義的屬性def get_word_num(self): # 子類自己定義的方法print(f"教師辦公地點為{self.place}")print(f"學(xué)生人數(shù)為{self.student_num}")A = Teacher() print(Teacher.place) # 子類繼承了父類的屬性,所以子類有父類的屬性 A.get_word() # 子類繼承了父類的方法,所以子類有父類的方法 print(Teacher.student_num) # 輸出子類自己定義的屬性 A.get_word_num() # 調(diào)用子類自己定義的方法

輸出結(jié)果如下,可以看出繼承基類后,派生類既可以調(diào)用自己的方法,也能調(diào)用所繼承基類中的方法:

(一)多繼承

多繼承指一個派生類繼承多個基類,多繼承的格式為class 派生類(基類1,基類2……)。

(二)派生類方法重寫

當(dāng)基類中的方法無法滿足派生類中的要求時,可以重寫基類的方法,重寫后的基類原方法并未改變。

例如下列python代碼,派生類teacher中重寫基類中的get_word()方法:

class Employee:place = "office"@classmethoddef get_word(cls):print(f"{cls.place}")class Teacher(Employee):student_num = 50def get_word(self):print(f"{self.student_num}")A = Teacher() Employee.get_word() A.get_word() Employee.get_word()

運(yùn)行結(jié)果如下,重寫基類中的get_word()方法后,并未改變該方法:

(三)super()函數(shù)

可以通過super()函數(shù),在派生類重寫基類的方法后,仍可調(diào)用基類中的方法。
下列python代碼:

class Employee:place = "office"@classmethoddef get_word(cls):print(f"{cls.place}")class Teacher(Employee):student_num = 50def get_word(self):print(f"{self.student_num}")print("使用super()函數(shù)調(diào)用基類中的方法:")super().get_word()A = Teacher() A.get_word()

運(yùn)行結(jié)果如下,可以看到通過super()函數(shù)調(diào)用已經(jīng)被派生類teacher重寫的基類方法get_word():

六、多態(tài)

多態(tài)指不考慮對象類型并使用該對象,讓具有不同功能的函數(shù)使用相同的函數(shù)名稱,從而通過函數(shù)名稱調(diào)用不同功能的函數(shù)。
下列python代碼,通過Person類中的get_word()方法中的name參數(shù),傳給name參數(shù)是目標(biāo)類的實例對象即調(diào)用該類的get_word()方法:

class Person:def get_word(self, name):name.get_word()class Employee:def get_word(self):print("職工")class Teacher(Employee):def get_word(self):print("教師")class Professor(Employee):def get_word(self):print("教授")A = Person() A.get_word(Employee()) A.get_word(Teacher()) A.get_word(Professor())

運(yùn)行結(jié)果如下:

總結(jié)

以上是生活随笔為你收集整理的Python程序开发——第六章 类与对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。