在 Python 中創(chuàng)建一個(gè)類及其對(duì)象
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括長(zhǎng)子網(wǎng)站建設(shè)、長(zhǎng)子網(wǎng)站制作、長(zhǎng)子網(wǎng)頁(yè)制作以及長(zhǎng)子網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,長(zhǎng)子網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到長(zhǎng)子省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
在 Python 中創(chuàng)建一個(gè)空類
在 Python 中使用 Type 創(chuàng)建類
在 Python 中創(chuàng)建和調(diào)用類的方法
使用 __init__() 方法為數(shù)據(jù)屬性賦值
在 Python 中更新對(duì)象屬性
在 Python 中刪除對(duì)象屬性和對(duì)象
在 Python 中檢查和比較對(duì)象的類型
在Python中將對(duì)象的所有屬性復(fù)制到另一個(gè)對(duì)象
在 Python 中迭代對(duì)象屬性
在 Python 中打印對(duì)象的所有屬性
在python中在運(yùn)行時(shí)創(chuàng)建類的數(shù)據(jù)屬性
在函數(shù)中將對(duì)象的實(shí)例作為參數(shù)傳遞
在 Python 中創(chuàng)建和使用自定義 Self 參數(shù)
使用self參數(shù)來(lái)維護(hù)對(duì)象的狀態(tài)
在 Python 中創(chuàng)建和使用靜態(tài)類變量
在 Python 中的一個(gè)函數(shù)上使用多個(gè)裝飾器
在 Python 中的方法中同時(shí)訪問(wèn) cls 和 self
從裝飾器訪問(wèn)實(shí)例方法的類
使用給定的裝飾器獲取 Python 類的所有方法
裝飾一個(gè) class
將類字段作為參數(shù)傳遞給類方法上的裝飾器
在 Python 中創(chuàng)建多個(gè)傳入?yún)?shù)列表的類變量
Python 中的 wraps 裝飾器
使用可選參數(shù)構(gòu)建裝飾器
在 Python 中將參數(shù)傳遞給裝飾器
@property 裝飾器
類和函數(shù)的裝飾器
Python 中帶參數(shù)和返回值的裝飾器
Python 使用參數(shù) wraps 裝飾器
Python 裝飾器獲取類名
簡(jiǎn)單裝飾器示例
在 Python 中使用 print() 打印類的實(shí)例
在 Python 中的類中將裝飾器定義為方法
獲取在 Python 中修飾的給定類的所有方法
帶參數(shù)和不帶參數(shù)的 Python 裝飾器
Python 中帶有 self 參數(shù)的類方法裝飾器
在 Python 中的另一個(gè)類中使用隱藏的裝飾器
裝飾器內(nèi)部的 self 對(duì)象
在 Python 中將多個(gè)裝飾器應(yīng)用于單個(gè)函數(shù)
Python 裝飾器獲取類實(shí)例
__init__ 和 __call__ 有什么區(qū)別
在 Python 中使用 __new__ 和 __init__
Python 中的迭代重載方法
在 Python 中使用迭代器反轉(zhuǎn)字符串
Python 中 __reversed__ 魔術(shù)方法
Python 中的 __getitem__ 和 __setitem__
在 Python 中使用 __getattr__ 和 __setattr__ 進(jìn)行屬性賦值
什么是 __del__ 方法以及如何調(diào)用它
創(chuàng)建類的私有成員
一個(gè) Python 封裝的例子
一個(gè) Python 組合的例子
一個(gè)Python聚合的例子
Python 中的單級(jí)、多級(jí)和多級(jí)繼承
在 Python 中獲取一個(gè)類的父類
Python 中的多態(tài)性
訪問(wèn) Child 類中的私有成員
Python 中的抽象類
創(chuàng)建一個(gè)抽象類來(lái)覆蓋 Python 中的默認(rèn)構(gòu)造函數(shù)
使一個(gè)抽象類繼承另一個(gè)抽象類
Python 中的 super 是做什么的
super() 如何在多重繼承中與 __init__() 方法一起工作
將 super 與類方法一起使用
mro 是做什么的
Python 中的元類是什么
元類的具體案例
在 Python 中使用元類的單例類
@staticmethod 和 @classmethod 有什么區(qū)別
Python 中的裝飾器是什么
制作函數(shù)裝飾器鏈
python 因?yàn)樽兞吭谫x值的時(shí)候才確定類型的,所以這用抽象類這個(gè)東西也行的,你在實(shí)現(xiàn)多態(tài)的時(shí)候cacth一下exctption就行了
眾所周知,Python是一門面向?qū)ο蟮恼Z(yǔ)言,在Python無(wú)論是數(shù)值、字符串、函數(shù)亦或是類型、類,都是對(duì)象。
對(duì)象是在 堆 上分配的結(jié)構(gòu),我們定義的所有變量、函數(shù)等,都存儲(chǔ)于堆內(nèi)存,而變量名、函數(shù)名則是一個(gè)存儲(chǔ)于 棧 中、指向堆中具體結(jié)構(gòu)的引用。
要想深入學(xué)習(xí)Python,首先需要知道Python對(duì)象的定義。
我們通常說(shuō)的Python都是指CPython,底層由C語(yǔ)言實(shí)現(xiàn),源碼地址: cpython [GitHub]
Python對(duì)象的定義位于 Include/object.h ,是一個(gè)名為 PyObject 的結(jié)構(gòu)體:
Python中的所有對(duì)象都繼承自PyObejct,PyObject包含一個(gè)用于垃圾回收的雙向鏈表,一個(gè)引用計(jì)數(shù)變量 ob_refcnt 和 一個(gè)類型對(duì)象指針 ob_type
從PyObejct的注釋中,我們可以看到這樣一句:每個(gè)指向 可變大小Python對(duì)象 的指針也可以轉(zhuǎn)換為 PyVarObject* (可變大小的Python對(duì)象會(huì)在下文中解釋)。 PyVarObejct 就是在PyObject的基礎(chǔ)上多了一個(gè) ob_size 字段,用于存儲(chǔ)元素個(gè)數(shù):
在PyObject結(jié)構(gòu)中,還有一個(gè)類型對(duì)象指針 ob_type ,用于表示Python對(duì)象是什么類型,定義Python對(duì)象類型的是一個(gè) PyTypeObject 接口體
實(shí)際定義是位于 Include/cpython/object.h 的 _typeobject :
在這個(gè)類型對(duì)象中,不僅包含了對(duì)象的類型,還包含了如分配內(nèi)存大小、對(duì)象標(biāo)準(zhǔn)操作等信息,主要分為:
以Python中的 int類型 為例,int類型對(duì)象的定義如下:
從PyObject的定義中我們知道,每個(gè)對(duì)象的 ob_type 都要指向一個(gè)具體的類型對(duì)象,比如一個(gè)數(shù)值型對(duì)象 100 ,它的ob_type會(huì)指向 int類型對(duì)象PyLong_Type 。
PyTypeObject結(jié)構(gòu)體第一行是一個(gè)PyObject_VAR_HEAD宏,查看宏定義可知PyTypeObject是一個(gè)變長(zhǎng)對(duì)象
也就是說(shuō),歸根結(jié)底 類型對(duì)象也是一個(gè)對(duì)象 ,也有ob_type屬性,那 PyLong_Type 的 ob_type 是什么呢?
回到PyLong_Type的定義,第一行 PyVarObject_HEAD_INIT(PyType_Type, 0) ,查看對(duì)應(yīng)的宏定義
由以上關(guān)系可以知道, PyVarObject_HEAD_INIT(PyType_Type, 0) = { { _PyObject_EXTRA_INIT 1, PyType_Type } 0} ,將其代入 PyObject_VAR_HEAD ,得到一個(gè)變長(zhǎng)對(duì)象:
這樣看就很明確了,PyLong_Type的類型就是PyType_Typ,同理可知, Python類型對(duì)象的類型就是PyType_Type ,而 PyType_Type對(duì)象的類型是它本身
從上述內(nèi)容中,我們知道了對(duì)象和對(duì)象類型的定義,那么根據(jù)定義,對(duì)象可以有以下兩種分類
Python對(duì)象定義有 PyObject 和 PyVarObject ,因此,根據(jù)對(duì)象大小是否可變的區(qū)別,Python對(duì)象可以劃分為 可變對(duì)象(變長(zhǎng)對(duì)象) 和 不可變對(duì)象(定長(zhǎng)對(duì)象)
原本的對(duì)象a大小并沒(méi)有改變,只是s引用的對(duì)象改變了。這里的對(duì)象a、對(duì)象b就是定長(zhǎng)對(duì)象
可以看到,變量l仍然指向?qū)ο骯,只是對(duì)象a的內(nèi)容發(fā)生了改變,數(shù)據(jù)量變大了。這里的對(duì)象a就是變長(zhǎng)對(duì)象
由于存在以上特性,所以使用這兩種對(duì)象還會(huì)帶來(lái)一種區(qū)別:
聲明 s2 = s ,修改s的值: s = 'new string' ,s2的值不會(huì)一起改變,因?yàn)橹皇莝指向了一個(gè)新的對(duì)象,s2指向的舊對(duì)象的值并沒(méi)有發(fā)生改變
聲明 l2 = l ,修改l的值: l.append(6) ,此時(shí)l2的值會(huì)一起改變,因?yàn)閘和l2指向的是同一個(gè)對(duì)象,而該對(duì)象的內(nèi)容被l修改了
此外,對(duì)于 字符串 對(duì)象,Python還有一套內(nèi)存復(fù)用機(jī)制,如果兩個(gè)字符串變量值相同,那它們將共用同一個(gè)對(duì)象:
對(duì)于 數(shù)值型 對(duì)象,Python會(huì)默認(rèn)創(chuàng)建0~2 8 以內(nèi)的整數(shù)對(duì)象,也就是 0 ~ 256 之間的數(shù)值對(duì)象是共用的:
按照Python數(shù)據(jù)類型,對(duì)象可分為以下幾類:
Python創(chuàng)建對(duì)象有兩種方式,泛型API和和類型相關(guān)的API
這類API通常以 PyObject_xxx 的形式命名,可以應(yīng)用在任意Python對(duì)象上,如:
使用 PyObjecg_New 創(chuàng)建一個(gè)數(shù)值型對(duì)象:
這類API通常只能作用于一種類型的對(duì)象上,如:
使用 PyLong_FromLong 創(chuàng)建一個(gè)數(shù)值型對(duì)象:
在我們使用Python聲明變量的時(shí)候,并不需要為變量指派類型,在給變量賦值的時(shí)候,可以賦值任意類型數(shù)據(jù),如:
從Python對(duì)象的定義我們已經(jīng)可以知曉造成這個(gè)特點(diǎn)的原因了,Python創(chuàng)建對(duì)象時(shí),會(huì)分配內(nèi)存進(jìn)行初始化,然后Python內(nèi)部通過(guò) PyObject* 變量來(lái)維護(hù)這個(gè)對(duì)象,所以在Python內(nèi)部各函數(shù)直接傳遞的都是一種泛型指針 PyObject* ,這個(gè)指針?biāo)赶虻膶?duì)象類型是不固定的,只能通過(guò)所指對(duì)象的 ob_type 屬性動(dòng)態(tài)進(jìn)行判斷,而Python正是通過(guò) ob_type 實(shí)現(xiàn)了多態(tài)機(jī)制
Python在管理維護(hù)對(duì)象時(shí),通過(guò)引用計(jì)數(shù)來(lái)判斷內(nèi)存中的對(duì)象是否需要被銷毀,Python中所有事物都是對(duì)象,所有對(duì)象都有引用計(jì)數(shù) ob_refcnt 。
當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)減少到0之后,Python將會(huì)釋放該對(duì)象所占用的內(nèi)存和系統(tǒng)資源。
但這并不意味著最終一定會(huì)釋放內(nèi)存空間,因?yàn)轭l繁申請(qǐng)釋放內(nèi)存會(huì)大大降低Python的執(zhí)行效率,因此Python中采用了內(nèi)存對(duì)象池的技術(shù),是的對(duì)象釋放的空間會(huì)還給內(nèi)存池,而不是直接釋放,后續(xù)需要申請(qǐng)空間時(shí),優(yōu)先從內(nèi)存對(duì)象池中獲取。
1)、將公共的屬性和方法放到父類中,自己只考慮特有的屬性和方法。
2)、覆蓋父類的方法即重寫父類方法,在運(yùn)行中只會(huì)調(diào)用子類中重寫的方法不用調(diào)用父類中的方法。
3)、子類擁有一個(gè)父類叫作單繼承,子類可以擁有多個(gè)父類,并且具有所有父類的屬性和方法。
1)、指的是為不同的基礎(chǔ)形態(tài)(數(shù)據(jù)類型)提供著接口的能力,接口指的是函數(shù)和方法。
2)、顧名思義,多態(tài)就是多種表現(xiàn)形態(tài)的意思,它是一種機(jī)制,一種能力,而非某個(gè)關(guān)鍵詞。它在類的繼承中得以實(shí)現(xiàn),在類的方法調(diào)用中得以體現(xiàn)。
3)、多態(tài)意味著變量并不知道引用的對(duì)象是什么,根據(jù)引用對(duì)象的不同表現(xiàn)不同的行為方式。
4)、多態(tài)以封裝和繼承為前提,不同的子類對(duì)象調(diào)用相同的方法,產(chǎn)生不同的執(zhí)行效果。它可以增加代碼的靈活度,以繼承和重寫父類的方法為前提,調(diào)用方法不會(huì)影響到類的內(nèi)部設(shè)計(jì)
1)、通過(guò)組合技巧將一個(gè)對(duì)象作用變量保存在另一個(gè)對(duì)象中,可以模擬擁有關(guān)系。
2)、它是一種將對(duì)象或類組合成更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)或構(gòu)件實(shí)現(xiàn)的方法。
3)、在組合中,一個(gè)對(duì)象可用于調(diào)用其他模塊中的成員函數(shù),這樣一來(lái),無(wú)需通過(guò)繼承就可以實(shí)現(xiàn)基本功能的跨模塊調(diào)用。
總結(jié):
今天和大家分享的是面向?qū)ο缶幊痰暮诵母拍睿悍庋b,抽象,多態(tài)、繼承、組合,可以結(jié)合代碼示例本地去運(yùn)行著感受這些概念的含義。
python里一個(gè)class不可以定義多個(gè)構(gòu)造函數(shù),一個(gè)class只能有一個(gè)用于構(gòu)造對(duì)象的__init__函數(shù),但python中的變量是無(wú)類型的,因此傳給__init__的參數(shù)可以是任何類型python中的函數(shù)參數(shù)在定義時(shí)可以有默認(rèn)值,可以讓__init__函數(shù)接受多個(gè)參數(shù),在后面的一些參數(shù)給出默認(rèn)值的方法讓__init__接受不同個(gè)數(shù)的參數(shù),并且執(zhí)行類型檢查執(zhí)行不同的代碼,用上述方法實(shí)現(xiàn)類的構(gòu)造函數(shù)的多態(tài)性。Python是一種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。是一種面向?qū)ο蟮膭?dòng)態(tài)類型語(yǔ)言,最初被設(shè)計(jì)用于編寫自動(dòng)化腳本(shell),隨著版本的不斷更新和語(yǔ)言新功能的添加,越來(lái)越多被用于獨(dú)立的、大型項(xiàng)目的開發(fā)。擴(kuò)展資料:
說(shuō)起科學(xué)計(jì)算,首先會(huì)被提到的可能是MATLAB。然而除了MATLAB的一些專業(yè)性很強(qiáng)的工具箱還無(wú)法被替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相應(yīng)的擴(kuò)展庫(kù)。和MATLAB相比,用Python做科學(xué)計(jì)算有如下優(yōu)點(diǎn):1、MATLAB是一款商用軟件,并且價(jià)格不菲。而Python完全免費(fèi),眾多開源的科學(xué)計(jì)算庫(kù)都提供了Python的調(diào)用接口。用戶可以在任何計(jì)算機(jī)上免費(fèi)安裝Python及其絕大多數(shù)擴(kuò)展庫(kù)。2、與MATLAB相比,Python是一門更易學(xué)、更嚴(yán)謹(jǐn)?shù)某绦蛟O(shè)計(jì)語(yǔ)言。它能讓用戶編寫出更易讀、易維護(hù)的代碼。3、MATLAB主要專注于工程和科學(xué)計(jì)算。然而即使在計(jì)算領(lǐng)域,也經(jīng)常會(huì)遇到文件管理、界面設(shè)計(jì)、網(wǎng)絡(luò)通信等各種需求。而Python有著豐富的擴(kuò)展庫(kù),可以輕易完成各種高級(jí)任務(wù),開發(fā)者可以用Python實(shí)現(xiàn)完整應(yīng)用程序所需的各種功能。參考資料來(lái)源:百度百科-Python
當(dāng)前題目:python函數(shù)的多態(tài) python多態(tài)的例子
文章鏈接:http://vcdvsql.cn/article34/dosdppe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、虛擬主機(jī)、關(guān)鍵詞優(yōu)化、網(wǎng)頁(yè)設(shè)計(jì)公司、營(yíng)銷型網(wǎng)站建設(shè)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)