麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Python > 正文

Python中的類和對象

2023-04-24 19:21:33
字體:
來源:轉載
供稿:網友

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

類和對象基礎知識

在面向對象世界里,我們在描述事物時一般從靜態特征和動態特征兩個方面進行描述。比如描述一個人,年齡、發色、臉型、身高等這些屬于靜態特征,而說話、跑步、走路等,這些屬于動態特征。

在實際中,我們到底需要描述事物的那些特征,這跟我們要研究的問題領域有關,比如同樣一個人,他作為學生時,我們可能關注他的學號、姓名、年齡、班級、專業、學習年限等靜態特征,可能關注他的選課、考試、參加體育活動等動態特征;如果他作為一個職工,可能我們要關注他的職工號、姓名、年齡、工作年數、職級、入職時間等靜態特征,可能關注他的晉職、加薪、辭職、退休等動態特征。

在面向對象里,我們把事物的靜態特征稱為屬性,而把動態特征稱為行為。

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

對象屬于類的一個實例,也就是說對象是類的一個具體的內容。如定義了一個學生類,則一個具體的學生張三就是學生的一個實例。

類是產生對象的一個模板,使用類定義的對象具有相同的屬性和行為,只不過屬性的取值可能不同,行為產生的最終結果可能不同。

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

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

Python中的類和對象

Python中類的定義方法

在Python中使用關鍵字class來定義一個類,其基本語法格式如下:

class className:
    # 類的屬性或方法

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

類定義的一個例子

下面我們來定義個學生類。

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

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

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

haveLesson屬于類中定義的一個方法(函數),它跟定義普通方法的方式沒有什么區別,不過類中的每個方法都有一個參數self,它表示調用當前方法的類的對象實例。haveLesson()方法中用于輸出兩行信息。

在使用這個類定義對象時,所有對象在其兩個屬性上的取值都相同的。

定義類的實例(對象)

下面這個例子在上面例子的基礎上來定義實例并演示具體使用方法。

s1 = Student()
s1.haveLesson()

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

上面這個例子演示了創建類對象的方法,Python跟其他面向對象語言不同,在定義實例(對象)時,直接使用s1 = Student()即可,無需使用new。

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

其輸出結果如下:

00000的姓名是:無名氏
無名氏正在上課。
10011的姓名是:武林網
武林網正在上課。

Python中定義類的構造器

類的構造器又稱類的構造函數或構造方法。Python中定義構造函數的方式與其它面向對象語言也不相同,它使用__init__()實現。

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

下面這個例子對上面的例子進行了改寫。

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', '武林網')
s1.haveLesson()

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

其運行結果如下:

10011的姓名是:武林網
武林網正在上課。
10012的姓名是:優雅的代碼
優雅的代碼正在上課。

Python與其它面向對象編程語言不同的是,它不支持類構造函數的重載,即Python不支持在類中定義多個構造函數。最后一個定義的構造函數將會覆蓋掉前面定義的構造函數,同時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()

其運行結果如下:

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'

從結果可以看出,因為最后定義的構造函數是帶2個參數的,因此在定義實例時使用1個參數將會給出TypeError錯誤。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 主播粉嫩国产在线精品 | 精品国产乱码久久久久久久 | 毛片免费观看完整版 | 久久综合综合 | 在线看免费的a | 99re久久最新地址获取 | 国产午夜免费不卡精品理论片 | 亚洲午夜久久久精品一区二区三区 | 黄色视屏免费在线观看 | 性盈盈盈影院 | 视频一区国产精品 | 主人在调教室性调教女仆游戏 | 午夜精品久久久久久久96蜜桃 | 毛片在线视频在线播放 | 特黄一级小说 | 国产精品久久久久久久久久 | 日韩2区 | 蜜桃视频在线免费观看 | 成人精品一区二区 | 久久九九热re6这里有精品 | 国产精品久久久久久久久久大牛 | 黄色av电影在线播放 | 免费三级大片 | 亚洲码无人客一区二区三区 | 九九热精品在线 | 一区二区三区日韩在线观看 | 国产1区在线观看 | 亚洲精品久久久久久久久久 | 久久9色 | 久久sp| 精品一区二区三区免费看 | 国产成人高清在线 | 国产免费中文字幕 | 亚洲精品在线观看网站 | 欧美亚洲黄色 | 欧美雌雄另类xxxxx | 8x成人在线电影 | 羞羞的视频免费在线观看 | 超碰人人做人人爱 | 娇妻被各种姿势c到高潮小说 | 日韩2区 |