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

首頁 > 編程 > Python > 正文

深入理解Python中的 __new__ 和 __init__及區別介紹

2020-02-15 22:59:38
字體:
來源:轉載
供稿:網友

本文的目的是討論Python中 __new__ 和 __ini___ 的用法。 __new__ 和 __init__ 的區別主要表現在:1. 它自身的區別;2. 及在Python中新式類和老式類的定義。

理解 __new__ 和 __init__ 的區別

這兩個方法的主要區別在于:__new__ 負責對象的創建而 __init__ 負責對象的初始化。在對象的實例化過程中,這兩個方法會有些細微的差別,表現于:如何工作,何時定義。

Python中兩種類的定義方式

Python 2.x 中類的定義分為新式定義和老式定義兩種。老式的類出現在Python 3之前且定義時不繼承自'object' 基類,默認是繼承自'type' :而新式類在定義時顯示地繼承'object'類。

Python 2.x中老式類的定義:

class A: # -> inherits from type   pass

Python 2.x中新式類的定義:

class A(object): # -> clearly inherits from object   pass

在Python 3.x中沒有新式類和老式類之分,它們都繼承自'object' 類。因此可以不用顯示地指定其基類。'object'基類中擁有的方法和屬性可通用于所有的新式類。

下文中我們將通過測試 __new__ 和 __init__ 在各個case中的用法,來逐步剖析它們的功能和區別,并以此確實我們該如何使用它們。

分析不同的Case

在研究具體的實現之前,我們應該知道 __new__ 方法只接受 cls 作為它的第一個參數,而 __init__ 一個參數是 self (__new__ 是一個類方法,而__init__ 是一個對象方法)。因為我們調用 __new__ 之前連實例都還沒有,因此那時根本沒有 self 的存在。__init__ 在 使用 __new__ 創建并返回一個實例之后調用,因此可將返回的實例通過self傳遞給它。

老式類中的__new__ 和 __init__

老式類中其實并沒有 __new__ 方法,因為 __init__ 就是它的構造方法(函數)。因此如果我們有下面這段代碼:

class A:

def __new__(cls):    print "A.__new__ is called" # -> this is never called

A()

這個case中的 __new__ 方法將永遠不會執行,因為它不是老式類的目標函數。

如果我們是重寫一個__init__ 方法:

class A:

def __init__(self):    print "A.__init__ called"

A()

它將會輸出:

A.__init__ called

我們嘗試從 __init__ 方法中返回一個值:

class A:

  def __init__(self):    return 29

A()

將會產生一個錯誤:

TypeError: __init__() should return None​

這意味著我們實例化一個老式類的對象時,不能控制它返回什么內容。

新式類中的 __new__ 和 __init__

新式類允許開發者根據他們的意圖來重寫 __new__ 和 __init__ 方法。__new__ (構造函數)單獨地創建一個對象,而 __init__ (初始化函數)負責初始化這個對象。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美一级片一区 | 成人免费网站在线观看视频 | 欧美成年性h版影视中文字幕 | 91精品国产日韩91久久久久久360 | 亚洲第一精品在线 | 国产五区| av黄色片网站| 91香蕉国产亚洲一区二区三区 | aa国产视频一区二区 | 爱爱视频天天干 | 亚洲最大av网站 | 国产精品久久久久久久四虎电影 | 久久免费视频精品 | 91天堂国产在线 | 中日韩乱码一二新区 | 高清国产免费 | 91av久久 | 精品在线视频播放 | 精品久久久久久 | 国色天香综合网 | 一区二区三区日韩在线观看 | chinese中国真实乱对白 | 一道本不卡一区 | 精品国产一区二区三区天美传媒 | 久久久经典视频 | 久久九九热re6这里有精品 | 香蕉久久久久 | 国产精品一区二区三区在线看 | 午夜精品久久久久久中宇 | 看毛片的网址 | 成人精品视频网站 | 91香蕉影视 | 亚洲va久久久噜噜噜久牛牛影视 | 在线视频观看国产 | 日本精品一二区 | 成人做爽爽爽爽免费国产软件 | 久久精品2019中文字幕 | 伊久在线| 亚洲一级网站 | 国产一国产一级毛片视频 | 一级一级一级一级毛片 |