91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python面向對象編程最容易忽視的知識點有哪些

發布時間:2021-11-20 15:29:13 來源:億速云 閱讀:155 作者:iii 欄目:編程語言

這篇文章主要介紹“Python面向對象編程最容易忽視的知識點有哪些”,在日常操作中,相信很多人在Python面向對象編程最容易忽視的知識點有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python面向對象編程最容易忽視的知識點有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1. __init__(self,...)‘構造器’方法

__init__(self,...)方法實際上并不是一個構造器,其并沒有創造一個新的對象,Python通過函數操作符()創建對象。在解釋器創建一個實例后,最先調用__init__(self,...)方法,定義額外的行為,如果沒有定義或者覆蓋__init__(self,...)方法,對實例不會施加任何特別的操作,直接返回它的對象,實例化過程完畢。函數的返回值應當為None,如果返回來任意對象,會導致TypeError異常。

class ReturnInt:
 def __init__(self): return 1ri=ReturnInt()
Traceback (most recent call last):
 File "C:/Users/PycharmProjects/untitled/Study EXP/Q.py", line 5, in <module>
 ri=ReturnInt()TypeError: __init__() should return None

重寫子類的__init__(self,...)方法不會自動調用基類的__init__(self,...)。所以如果需要在子類中調用基類的__init__(self,...),需要明確指出。

class C(P):
 def __init__(self):
 P.__init__(self)

我們可以使用super()函數更方便高效的重寫上面的代碼:

class C(P):
 def __init__(self): super(C,self).__init__()

不需要提供明確的父類,super()函數會幫助我們找到相應的父類,然后方便調用相關的屬性。

2. __new__(cls,...)‘構造器’方法

調用__new__(cls,...)時,實例不一定已經被創建,與__init__(self,...)方法需要傳入實例的引用不同,__new__(cls,...)傳入當前類的引用。可以用來對內建類型進行派生,實例化不可變對象。

3. 類屬性

類屬性僅與其被定義的的類相綁定,主要包括數據屬性(靜態變量)和方法。方法在類中定義,但卻只能被實例調用。如果沒有與類的數據屬性同名的實例屬性,通過實例也可以訪問類的數據屬性,但是卻不能作修改。

特殊的類屬性:

C.__name__ 類C的名字(字符串)C.__doc__ 類C的文檔字符串C.__bases__ 類C的所有父類構成的元組C.__dict__ 類C的屬性C.__module__ 類C定義所在的模塊C.__class__ 實例C對應的類

4. 實例屬性

實例僅擁有數據屬性,即類屬性。實例屬性可以動態創建,但是如果屬性在條件語句中創建,而該條件語句未執行,則該屬性實際并不存在,如果在后面代碼訪問該屬性,就會出錯。

帶默認參數的__init__(self,...)可以更有效的初始化一個實例,這樣可以省去顯式傳值的麻煩,但是默認參數應當是不變的對象,在使用入列表和字典等可變對象時應時刻保持警惕。

class demo_list:
 def __init__(self, l=[]): 
 self.l = l 
 def add(self, ele): 
 self.l.append(ele)def appender(ele): 
 obj = demo_list() 
 obj.add(ele) 
 print obj.lif 
__name__ == "__main__": 
 for i in range(5): 
 appender(i)
[0] 
[0, 1]
[0, 1, 2]
[0, 1, 2, 3] 
[0, 1, 2, 3, 4]

因為默認參數只會計算一次,不會重復使用,在上面的例子中,雖然使用不同的新建實例,可因為構造器的參數使用的是對列表的引用作為默認參數,所以每次的實例屬性都指向該列表所在的空間。

使用內建函數dir()可以顯示類和實例屬性,實例具有__dict__的特殊屬性,該屬性由字典組成,包含一個實例的所有屬性。

'#的意思為,當ReturnInt為新式類時,dir對應的結果'class ReturnInt: #class ReturnInt(object):
 def __init__(self): 
 passri=ReturnInt()
ri.name='a'ri.age=10print ri.__dict__print dir(ri)
{'age': 10, 'name': 'a'}
['__doc__', '__init__', '__module__', 'age', 'name']#['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'name']

從上面的程序中可以看到除了我們添加的實例屬性,實例還有許多其他的屬性,這些屬性是實例的內建類型屬性。

5. 綁定和方法調用

類屬性之一的方法只有在其所屬的類擁有實例時,才能被調用,當存在一個實例時,方法才被認為是綁定到那個實例了,沒有實例時,方法就是未綁定的。

當類具有實例時,比如類MyClass,通過mc.foo()調用可以把mc即self自動傳入到foo()中,而不需要我們明確的寫為mc.foo(self)。當時當沒有一個實例并且需要調用一個非綁定的方法時就必須傳遞self參數。

到此,關于“Python面向對象編程最容易忽視的知識點有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

望都县| 临沂市| 大连市| 平江县| 平远县| 宁都县| 宜黄县| 永福县| 津南区| 正蓝旗| 肥城市| 新疆| 石屏县| 巴彦淖尔市| 镇远县| 海兴县| 信丰县| 岳阳县| 佛冈县| 宝兴县| 水富县| 新丰县| 巴南区| 泉州市| 东乌珠穆沁旗| 连城县| 黑龙江省| 保靖县| 东阳市| 明光市| 满洲里市| 岑巩县| 雅江县| 花垣县| 阿克苏市| 汉阴县| 崇明县| 宣武区| 卫辉市| 碌曲县| 抚顺市|