type--類,object-or-type--類,一般是self
我們提供的服務(wù)有:網(wǎng)站制作、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、瑪沁ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的瑪沁網(wǎng)站制作公司
運(yùn)行發(fā)現(xiàn):super().add(x) 與A.add(self,x)執(zhí)行結(jié)果一致;但涉及多繼承,發(fā)現(xiàn)super()只調(diào)用一次
在super機(jī)制里可以保證公共父類僅被執(zhí)行一次,至于執(zhí)行的順序,是按照MRO(Method Resolution Order):方法解析順序 進(jìn)行的
super()可以調(diào)用父類中的任何方法,超(父類的父類)類的任何方法;可重寫父類同名的 init 函數(shù),及其他方法
在任何時(shí)候繼承類和重寫方法的,我們應(yīng)當(dāng)用到args, kwargs將接收到的位置參數(shù)和鍵值參數(shù)給父類方法
本節(jié)中的萬花筒通過彩色隨機(jī)螺旋線來實(shí)現(xiàn)。我們首先定義一個(gè)函數(shù)draw(),這個(gè)函數(shù)用來繪制一個(gè)螺旋線,函數(shù)中的畫筆起始位置的坐標(biāo)為函數(shù)的兩個(gè)形參。然后調(diào)用函數(shù)的時(shí)候使用一個(gè)for循環(huán)來實(shí)現(xiàn)多次調(diào)用函數(shù),同時(shí),函數(shù)的兩個(gè)實(shí)參由random模塊生成的隨機(jī)數(shù)組成。
9.3.3. 實(shí)例對象
現(xiàn)在我們可以用實(shí)例對象作什么?實(shí)例對象唯一可用的操作就是屬性引用。有兩種有效的屬性名。
數(shù)據(jù)屬性 相當(dāng)于 Smalltalk 中的“實(shí)例變量”或 C++ 中的“數(shù)據(jù)成員”。和局部變量一樣,數(shù)據(jù)屬性不需要聲明,第一次使用時(shí)它們就會(huì)生成。例如,如果 x 是前面創(chuàng)建的 MyClass 實(shí)例,下面這段代碼會(huì)打印出 16 而在堆棧中留下多余的東西:
x.counter = 1
while x.counter 10:
x.counter = x.counter * 2
print(x.counter)
del x.counter
另一種為實(shí)例對象所接受的引用屬性是 方法。方法是“屬于”一個(gè)對象的函數(shù)。(在 Python 中,方法不止是類實(shí)例所獨(dú)有:其它類型的對象也可有方法。例如,鏈表對象有 append,insert,remove,sort 等等方法。然而,在后面的介紹中,除非特別說明,我們提到的方法特指類方法)
實(shí)例對象的有效名稱依賴于它的類。按照定義,類中所有(用戶定義)的函數(shù)對象對應(yīng)它的實(shí)例中的方法。所以在我們的例子中,x.f 是一個(gè)有效的方法引用,因?yàn)?MyClass.f 是一個(gè)函數(shù)。但 x.i 不是,因?yàn)?MyClass.i 不是函數(shù)。不過 x.f 和 MyClass.f 不同,它是一個(gè) 方法對象 ,不是一個(gè)函數(shù)對象。
9.4. 一些說明
數(shù)據(jù)屬性會(huì)覆蓋同名的方法屬性。為了避免意外的名稱沖突,這在大型程序中是極難發(fā)現(xiàn)的 Bug,使用一些約定來減少?zèng)_突的機(jī)會(huì)是明智的??赡艿募s定包括:大寫方法名稱的首字母,使用一個(gè)唯一的小字符串(也許只是一個(gè)下劃線)作為數(shù)據(jù)屬性名稱的前綴,或者方法使用動(dòng)詞而數(shù)據(jù)屬性使用名詞。
數(shù)據(jù)屬性可以被方法引用,也可以由一個(gè)對象的普通用戶(客戶)使用。換句話說,類不能用來實(shí)現(xiàn)純凈的數(shù)據(jù)類型。事實(shí)上,Python 中不可能強(qiáng)制隱藏?cái)?shù)據(jù)——一切基于約定(如果需要,使用 C 編寫的 Python 實(shí)現(xiàn)可以完全隱藏實(shí)現(xiàn)細(xì)節(jié)并控制對象的訪問。這可以用來通過 C 語言擴(kuò)展 Python)。
客戶應(yīng)該謹(jǐn)慎的使用數(shù)據(jù)屬性——客戶可能通過踐踏他們的數(shù)據(jù)屬性而使那些由方法維護(hù)的常量變得混亂。注意:只要能避免沖突,客戶可以向一個(gè)實(shí)例對象添加他們自己的數(shù)據(jù)屬性,而不會(huì)影響方法的正確性——再次強(qiáng)調(diào),命名約定可以避免很多麻煩。
從方法內(nèi)部引用數(shù)據(jù)屬性(或其他方法)并沒有快捷方式。我覺得這實(shí)際上增加了方法的可讀性:當(dāng)瀏覽一個(gè)方法時(shí),在局部變量和實(shí)例變量之間不會(huì)出現(xiàn)令人費(fèi)解的情況。
一般,方法的第一個(gè)參數(shù)被命名為 self。這僅僅是一個(gè)約定:對 Python 而言,名稱 self 絕對沒有任何特殊含義。(但是請注意:如果不遵循這個(gè)約定,對其他的 Python 程序員而言你的代碼可讀性就會(huì)變差,而且有些 類查看器 程序也可能是遵循此約定編寫的。)
類屬性的任何函數(shù)對象都為那個(gè)類的實(shí)例定義了一個(gè)方法。函數(shù)定義代碼不一定非得定義在類中:也可以將一個(gè)函數(shù)對象賦值給類中的一個(gè)局部變量。例如:
# Function defined outside the class
def f1(self, x, y):
return min(x, x+y)
class C:
f = f1
def g(self):
return 'hello world'
h = g
現(xiàn)在 f, g 和 h 都是類 C 的屬性,引用的都是函數(shù)對象,因此它們都是 C 實(shí)例的方法-- h 嚴(yán)格等于 g 。要注意的是這種習(xí)慣通常只會(huì)迷惑程序的讀者。
分享題目:python類函數(shù)實(shí)例的簡單介紹
鏈接URL:http://jinyejixie.com/article38/hejgpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站改版、外貿(mào)建站、商城網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容