国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > Python > 正文

Python中的類和對(duì)象

2023-04-24 19:21:33
字體:
供稿:網(wǎng)友

這篇文章將介紹Python中類和對(duì)象的定義和使用方法。

類和對(duì)象基礎(chǔ)知識(shí)

在面向?qū)ο笫澜缋铮覀冊(cè)诿枋鍪挛飼r(shí)一般從靜態(tài)特征和動(dòng)態(tài)特征兩個(gè)方面進(jìn)行描述。比如描述一個(gè)人,年齡、發(fā)色、臉型、身高等這些屬于靜態(tài)特征,而說話、跑步、走路等,這些屬于動(dòng)態(tài)特征。

在實(shí)際中,我們到底需要描述事物的那些特征,這跟我們要研究的問題領(lǐng)域有關(guān),比如同樣一個(gè)人,他作為學(xué)生時(shí),我們可能關(guān)注他的學(xué)號(hào)、姓名、年齡、班級(jí)、專業(yè)、學(xué)習(xí)年限等靜態(tài)特征,可能關(guān)注他的選課、考試、參加體育活動(dòng)等動(dòng)態(tài)特征;如果他作為一個(gè)職工,可能我們要關(guān)注他的職工號(hào)、姓名、年齡、工作年數(shù)、職級(jí)、入職時(shí)間等靜態(tài)特征,可能關(guān)注他的晉職、加薪、辭職、退休等動(dòng)態(tài)特征。

在面向?qū)ο罄铮覀儼咽挛锏撵o態(tài)特征稱為屬性,而把動(dòng)態(tài)特征稱為行為。

我們把具有相同屬性和行為的事物定義為一個(gè)類

對(duì)象屬于類的一個(gè)實(shí)例,也就是說對(duì)象是類的一個(gè)具體的內(nèi)容。如定義了一個(gè)學(xué)生類,則一個(gè)具體的學(xué)生張三就是學(xué)生的一個(gè)實(shí)例。

類是產(chǎn)生對(duì)象的一個(gè)模板,使用類定義的對(duì)象具有相同的屬性和行為,只不過屬性的取值可能不同,行為產(chǎn)生的最終結(jié)果可能不同。

在具體的編程語言中,有時(shí)屬性也稱之為類的變量,而行為稱之為類的方法或類的函數(shù)。

在具體的編程語言中,一個(gè)類可能既有屬性又有方法,也可能只有屬性,也可能只有方法。

Python中的類和對(duì)象

Python中類的定義方法

在Python中使用關(guān)鍵字class來定義一個(gè)類,其基本語法格式如下:

class className:
    # 類的屬性或方法

上面className表示類的名稱,類的名稱一般是個(gè)名詞,在Python中類的名稱后緊跟一個(gè)冒號(hào),然后在下面定義它的屬性或方法。

類定義的一個(gè)例子

下面我們來定義個(gè)學(xué)生類。

class Student:
    student_id = '00000'
    student_name = '無名氏'

    def haveLesson(self):
        print(f'{self.student_id}的姓名是:{self.student_name}')
        print(f'{self.student_name}正在上課。')

上面這個(gè)例子定義了一個(gè)學(xué)生類,在里面定義了兩個(gè)變量,student_id和student_name并給出了默認(rèn)值。由于Python中的變量無需事先定義直接可以使用,則如果定義的話必須給出一個(gè)值來。

haveLesson屬于類中定義的一個(gè)方法(函數(shù)),它跟定義普通方法的方式?jīng)]有什么區(qū)別,不過類中的每個(gè)方法都有一個(gè)參數(shù)self,它表示調(diào)用當(dāng)前方法的類的對(duì)象實(shí)例。haveLesson()方法中用于輸出兩行信息。

在使用這個(gè)類定義對(duì)象時(shí),所有對(duì)象在其兩個(gè)屬性上的取值都相同的。

定義類的實(shí)例(對(duì)象)

下面這個(gè)例子在上面例子的基礎(chǔ)上來定義實(shí)例并演示具體使用方法。

s1 = Student()
s1.haveLesson()

s1.student_id = '10011'
s1.student_name = '武林網(wǎng)'
s1.haveLesson()

上面這個(gè)例子演示了創(chuàng)建類對(duì)象的方法,Python跟其他面向?qū)ο笳Z言不同,在定義實(shí)例(對(duì)象)時(shí),直接使用s1 = Student()即可,無需使用new。

上面這個(gè)例子也演示了對(duì)象使用其屬性和方法的形式。

其輸出結(jié)果如下:

00000的姓名是:無名氏
無名氏正在上課。
10011的姓名是:武林網(wǎng)
武林網(wǎng)正在上課。

Python中定義類的構(gòu)造器

類的構(gòu)造器又稱類的構(gòu)造函數(shù)或構(gòu)造方法。Python中定義構(gòu)造函數(shù)的方式與其它面向?qū)ο笳Z言也不相同,它使用__init__()實(shí)現(xiàn)。

比如上面學(xué)生類的例子,使用它定義的每個(gè)對(duì)象都具有相同的student_id和student_name取值,如何在定義實(shí)例時(shí)獲得不同的取值呢?這就需要借助類的構(gòu)造器了。

下面這個(gè)例子對(duì)上面的例子進(jìn)行了改寫。

class Student:
    def __init__(self, sid, sname):
        self.student_id = sid
        self.student_name = sname

    def haveLesson(self):
        print(f'{self.student_id}的姓名是:{self.student_name}')
        print(f'{self.student_name}正在上課。')

s1 = Student('10011', '武林網(wǎng)')
s1.haveLesson()

s2 = Student('10012', '優(yōu)雅的代碼')
s2.haveLesson()

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

10011的姓名是:武林網(wǎng)
武林網(wǎng)正在上課。
10012的姓名是:優(yōu)雅的代碼
優(yōu)雅的代碼正在上課。

Python與其它面向?qū)ο缶幊陶Z言不同的是,它不支持類構(gòu)造函數(shù)的重載,即Python不支持在類中定義多個(gè)構(gòu)造函數(shù)。最后一個(gè)定義的構(gòu)造函數(shù)將會(huì)覆蓋掉前面定義的構(gòu)造函數(shù),同時(shí)Python不給出任何提示。如下面的例子:

class Student:
    def __init__(self, sid):
        self.student_id = sid

    def __init__(self, sid, sname):
        self.student_id = sid
        self.student_name = sname

    def haveLesson(self):
        print(f'{self.student_name}({self.student_id})在上課.')

s1 = Student('10011')
s1.haveLesson()

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

Traceback (most recent call last):
  File "D:/Py/classInPython.py", line 12, in <module>
    s1 = Student('10011')
TypeError: Student.__init__() missing 1 required positional argument: 'sname'

從結(jié)果可以看出,因?yàn)樽詈蠖x的構(gòu)造函數(shù)是帶2個(gè)參數(shù)的,因此在定義實(shí)例時(shí)使用1個(gè)參數(shù)將會(huì)給出TypeError錯(cuò)誤。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 江都市| 古田县| 五莲县| 嘉兴市| 宁陵县| 金湖县| 新沂市| 凤城市| 鱼台县| 斗六市| 西乌珠穆沁旗| 开阳县| 深水埗区| 安庆市| 西藏| 镇安县| 手游| 罗甸县| 宿松县| 宁海县| 雅安市| 邯郸市| 新昌县| 中山市| 秀山| 如东县| 宣武区| 浑源县| 喀喇沁旗| 略阳县| 长治县| 盐城市| 固安县| 自贡市| 田阳县| 怀安县| 内丘县| 汉寿县| 廊坊市| 区。| 炉霍县|