Python編程基礎(chǔ)之類和對(duì)象
零、本講學(xué)習(xí)目標(biāo)
- 了解面向?qū)ο缶幊趟枷?/li>
- 掌握類和對(duì)象的定義和使用
- 了解Python中的對(duì)象
一、面向?qū)ο?/h2>
(一)程序員“面向?qū)ο?rdquo;
在現(xiàn)實(shí)世界中存在各種不同形態(tài)的事物,這些事物之間存在著各種各樣的聯(lián)系。在程序中使用對(duì)象來映射現(xiàn)實(shí)中的事物,使用對(duì)象間的關(guān)系來描述事物之間的聯(lián)系,這種思想就是面向?qū)ο蟆?/p>

(二)兩種編程思想實(shí)現(xiàn)五子棋
面向過程與面向?qū)ο蟮木幊趟枷?/p>

若加入悔棋功能,面向過程和面向?qū)ο?,分別怎么實(shí)現(xiàn)呢?

(三)面向過程 vs. 面向?qū)ο?nbsp;
面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一一實(shí)現(xiàn),使用的時(shí)候依次調(diào)用就可以了。(POP:Procedure-Oriented Programming)
面向?qū)ο?/strong>則是把構(gòu)成問題的事務(wù)按照一定規(guī)則劃分為多個(gè)獨(dú)立的對(duì)象,然后通過調(diào)用對(duì)象的方法來解決問題。(OOP:Object-Oriented Programming)
(四)面向?qū)ο笕筇攸c(diǎn)
面向?qū)ο笫前褬?gòu)成問題的事務(wù)按照一定規(guī)則劃分為多個(gè)獨(dú)立的對(duì)象,然后通過調(diào)用對(duì)象的方法來解決問題。一個(gè)應(yīng)用程序會(huì)包含多個(gè)對(duì)象,通過多個(gè)對(duì)象的相互配合來實(shí)現(xiàn)應(yīng)用程序的功能,這樣當(dāng)應(yīng)用程序功能發(fā)生變動(dòng)時(shí),只需要修改個(gè)別的對(duì)象就可以了,從而使代碼更容易得到維護(hù)。面向?qū)ο蟮奶攸c(diǎn)主要可以概括為封裝性、繼承性和多態(tài)性。
1、封裝(encapsulation)
封裝是面向?qū)ο蟮暮诵乃枷?,將?duì)象的屬性(property)和行為(behavior)封裝起來,不需要讓外界知道具體實(shí)現(xiàn)細(xì)節(jié)。
2、繼承(inheritance)
繼承主要描述的就是類與類之間的關(guān)系,通過繼承,可以在無需重新編寫原有類的情況下,對(duì)原有類的功能進(jìn)行擴(kuò)展(extend)。
3、多態(tài)(polymorphism)
多態(tài)指的是在一個(gè)類中定義的屬性和功能被其他類繼承后,當(dāng)把子類對(duì)象直接賦值給父類引用變量時(shí),相同引用類型的變量調(diào)用同一個(gè)方法所呈現(xiàn)出的多種不同行為特性。
二、類和對(duì)象
(一)類和對(duì)象的關(guān)系
1、概述
面向?qū)ο蟮木幊趟枷?,力圖讓程序中對(duì)事物的描述與該事物在現(xiàn)實(shí)中的形態(tài)保持一致。為了做到這一點(diǎn),面向?qū)ο蟮乃枷胫刑岢隽藘蓚€(gè)概念——類和對(duì)象。
類是對(duì)某一類事物的抽象描述,而對(duì)象用于表示現(xiàn)實(shí)中該類事物的個(gè)體。簡(jiǎn)而言之,類是模板(template),對(duì)象是實(shí)例(instance)。
2、示意圖

分析: 可以將上圖人看作是一個(gè)類,將每個(gè)具體的人(如小韓、小石等)看作對(duì)象,從人與具體個(gè)人之間的關(guān)系便可以看出類與對(duì)象之間的關(guān)系。
說明: 類用于描述多個(gè)對(duì)象的共同特征,它是對(duì)象的模板,而對(duì)象用于描述現(xiàn)實(shí)中的個(gè)體,它是類的實(shí)例。對(duì)象是類的具體化,并且一個(gè)類可以對(duì)應(yīng)多個(gè)對(duì)象。
(二)類的定義
1、類的構(gòu)成
- 類的名稱:類名,首字母必須大寫,比如Person
- 類的屬性:一組數(shù)據(jù),比如姓名、性別、年齡……(描述類的特征 - 靜態(tài))
- 類的方法:允許進(jìn)行操作的方法,比如說話、步行、跑步……(描述類的行為 - 動(dòng)態(tài))
2、類定義語法格式
使用class關(guān)鍵字來聲明一個(gè)類
class 類名:
類的屬性
類的方法
定義的類繼承了一個(gè)或多個(gè)父類
class 類名(父類1, 父類2, …, 父類n):
類的屬性
類的方法
3、案例演示
編寫程序 - 類定義演示.py

(三)創(chuàng)建對(duì)象
1、語法格式
- 利用無參構(gòu)造方法創(chuàng)建對(duì)象:對(duì)象名 = 類名()
- 利用有參構(gòu)造方法創(chuàng)建對(duì)象:對(duì)象名 = 類名(參數(shù)列表)
2、給對(duì)象添加屬性
對(duì)象名.新屬性名 = 值
3、案例演示
編寫程序 - 基于類創(chuàng)建對(duì)象.py

運(yùn)行程序,查看結(jié)果

修改對(duì)象屬性值,再訪問對(duì)象方法

- 由此可見,在Person類里定義三個(gè)屬性name、gender、age,所有基于該類的對(duì)象都具有同樣的初始值,然后可以根據(jù)需要修改對(duì)象的屬性值。
- 基于Person類再創(chuàng)建一個(gè)對(duì)象father,調(diào)用speak()方法,修改對(duì)象屬性值,再調(diào)用speak()方法

三、Python中的對(duì)象
(一)概述
- 在前面,我們已使用過多種對(duì)象:整數(shù)對(duì)象、小數(shù)對(duì)象、字符串對(duì)象、函數(shù)對(duì)象、模塊對(duì)象等。
- 用dir()函數(shù)查看一個(gè)對(duì)象有哪些屬性與方法
(二)常用對(duì)象
1、整數(shù)對(duì)象
(1)查看整數(shù)對(duì)象的屬性和方法
執(zhí)行:dir(int)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
(2)案例演示
查看整數(shù)的字節(jié)長(zhǎng)度 - bit_length()

327的二進(jìn)制位數(shù)是9,調(diào)用bin()函數(shù)將其轉(zhuǎn)換成二進(jìn)制:101000111(9位)
查看復(fù)數(shù)的實(shí)部和虛部

整數(shù)轉(zhuǎn)換成字節(jié)數(shù)據(jù) - to_bytes()

演示將整數(shù)1345轉(zhuǎn)換成字節(jié)數(shù)據(jù)

演示將字節(jié)數(shù)據(jù)轉(zhuǎn)換成整數(shù)

演示冪運(yùn)算 - __pow__()

演示比較運(yùn)算

2、小數(shù)對(duì)象
(1)查看小數(shù)對(duì)象的屬性和方法
執(zhí)行:dir(float)
['__abs__', '__add__', '__bool__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getformat__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__le__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__pos__', '__pow__', '__radd__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmod__', '__rmul__', '__round__', '__rpow__', '__rsub__', '__rtruediv__', '__set_format__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']
(2)案例演示
保留小數(shù)位數(shù) - __round__()

演示冪運(yùn)算 - __pow__()

3、字符串對(duì)象
(1)查看字符串對(duì)象的屬性和方法
執(zhí)行:dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
(2)案例演示
判斷字符串是不是全為數(shù)字構(gòu)成 - isdigit()

判斷字符串是不是全為字母構(gòu)成 - isalpha()

4、函數(shù)對(duì)象
定義函數(shù)

查看函數(shù)類型

將函數(shù)對(duì)象賦值給變量

5、模塊對(duì)象
導(dǎo)入模塊并查看類型

訪問模塊的屬性與函數(shù)

將模塊對(duì)象賦值給變量

(三)兩種對(duì)象
在Python的對(duì)象模型中,有兩種對(duì)象:類對(duì)象和實(shí)例對(duì)象。類對(duì)象是在執(zhí)行class語句時(shí)創(chuàng)建的,而實(shí)例對(duì)象是在調(diào)用類的時(shí)候創(chuàng)建的。每調(diào)用一次類,便創(chuàng)建一個(gè)實(shí)例對(duì)象。類對(duì)象只有一個(gè),而實(shí)例對(duì)象可以有多個(gè)。類對(duì)象和每個(gè)實(shí)例對(duì)象都分別擁有自己的命名空間,在各自的命名空間內(nèi)存儲(chǔ)屬于自己的數(shù)據(jù)。
1、類對(duì)象
- Python執(zhí)行class語句時(shí)創(chuàng)建一個(gè)類對(duì)象和一個(gè)變量(名稱就是類名稱),變量引用類對(duì)象。與def類似,class也是可執(zhí)行語句。導(dǎo)入類模塊時(shí),class語句被執(zhí)行,創(chuàng)建類對(duì)象。
- 類中的賦值語句創(chuàng)建的變量是類的數(shù)據(jù)屬性。與模塊類似,類中的頂層賦值語句創(chuàng)建的變量才屬于類對(duì)象。類的數(shù)據(jù)數(shù)據(jù)用“對(duì)象名.屬性名”格式來訪問。
- 類中的def語句定義的函數(shù)是類的方法屬性,用“對(duì)象名.方法名()”格式來訪問。
類的數(shù)據(jù)和方法由所有的實(shí)例對(duì)象共享。
2、實(shí)例對(duì)象
- 實(shí)例對(duì)象通過調(diào)用類對(duì)象來創(chuàng)建(就像調(diào)用函數(shù)一樣來調(diào)用類對(duì)象)。
- 每個(gè)實(shí)例對(duì)象繼承類對(duì)象的屬性,并獲得自己的命名空間。
- 實(shí)例對(duì)象的“私有”屬性。類的方法函數(shù)的第一個(gè)參數(shù)默認(rèn)為self,表示引用方法的對(duì)象實(shí)例。在方法中對(duì)self的屬性賦值才會(huì)創(chuàng)建屬于實(shí)例對(duì)象的屬性。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Python爬蟲爬取王者榮耀英雄信息并保存到圖數(shù)據(jù)庫的操作方法
本文介紹了如何使用Python爬蟲技術(shù)從王者榮耀官方獲取英雄信息,并將數(shù)據(jù)保存到圖數(shù)據(jù)庫中,文章詳細(xì)說明了爬取英雄名稱、類型及皮膚名稱的過程,并展示了創(chuàng)建英雄類型節(jié)點(diǎn)和英雄信息節(jié)點(diǎn)的方法2024-09-09
解決Jupyter因卸載重裝導(dǎo)致的問題修復(fù)
這篇文章主要介紹了解決Jupyter因卸載重裝導(dǎo)致的問題修復(fù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
編寫Python小程序來統(tǒng)計(jì)測(cè)試腳本的關(guān)鍵字
這篇文章主要介紹了編寫Python小程序來統(tǒng)計(jì)測(cè)試腳本的關(guān)鍵字的方法,文中的實(shí)例不僅可以統(tǒng)計(jì)關(guān)鍵字?jǐn)?shù)量,還可以按主關(guān)鍵字來歸類,需要的朋友可以參考下2016-03-03
Python數(shù)據(jù)可視化教程之Matplotlib實(shí)現(xiàn)各種圖表實(shí)例
這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)可視化教程之利用Matplotlib實(shí)現(xiàn)各種圖表的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧2019-01-01
django實(shí)現(xiàn)前后臺(tái)交互實(shí)例
本篇文章主要介紹了django實(shí)現(xiàn)前后臺(tái)交互實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
Python中讓MySQL查詢結(jié)果返回字典類型的方法
這篇文章主要介紹了Python中讓MySQL查詢結(jié)果返回字典類型的方法,默認(rèn)情況下Mysql返回的是元組類型,本文實(shí)現(xiàn)了返回字典類型,需要的朋友可以參考下2014-08-08
Python圖像處理模塊ndimage用法實(shí)例分析
這篇文章主要介紹了Python圖像處理模塊ndimage用法,結(jié)合實(shí)例形式分析了Python圖像處理模塊ndimage基本功能及常見的圖形運(yùn)算操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-09-09

