午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    詳解Python中的__new__()方法的使用
    來源:易賢網(wǎng) 閱讀:1288 次 日期:2015-04-14 15:54:07
    溫馨提示:易賢網(wǎng)小編為您整理了“詳解Python中的__new__()方法的使用”,方便廣大網(wǎng)友查閱!

    先看下object類中對__new__()方法的定義:

    class object: @staticmethod # known case of __new__ def __new__(cls, *more): # known special case of object.__new__ """ T.__new__(S, ...) -> a new object with type S, a subtype of T """ pass

    object將__new__()方法定義為靜態(tài)方法,并且至少需要傳遞一個參數(shù)cls,cls表示需要實例化的類,此參數(shù)在實例化時由Python解釋器自動提供。

    我們來看下下面類中對__new__()方法的實現(xiàn):

    class Demo(object): def __init__(self): print '__init__() called...' def __new__(cls, *args, **kwargs): print '__new__() - {cls}'.format(cls=cls) return object.__new__(cls, *args, **kwargs) if __name__ == '__main__': de = Demo()

    輸出:

    __new__() - <class '__main__.Demo'> __init__() called...

    發(fā)現(xiàn)實例化對象的時候,調用__init__()初始化之前,先調用了__new__()方法

    __new__()必須要有返回值,返回實例化出來的實例,需要注意的是,可以return父類__new__()出來的實例,也可以直接將object的__new__()出來的實例返回。

    __init__()有一個參數(shù)self,該self參數(shù)就是__new__()返回的實例,__init__()在__new__()的基礎上可以完成一些其它初始化的動作,__init__()不需要返回值。

    若__new__()沒有正確返回當前類cls的實例,那__init__()將不會被調用,即使是父類的實例也不行。

    我們可以將類比作制造商,__new__()方法就是前期的原材料購買環(huán)節(jié),__init__()方法就是在有原材料的基礎上,加工,初始化商品環(huán)節(jié)。

    實際應用過程中,我們可以這么使用:

    class LxmlDocument(object_ref): cache = weakref.WeakKeyDictionary() __slots__ = ['__weakref__'] def __new__(cls, response, parser=etree.HTMLParser): cache = cls.cache.setdefault(response, {}) if parser not in cache: obj = object_ref.__new__(cls) cache[parser] = _factory(response, parser) return cache[parser]

    該類中的__new__()方法的使用,就是再進行初始化之前,檢查緩存中是否存在該對象,如果存在則將緩存存放對象直接返回,如果不存在,則將對象放至緩存中,供下次使用。

    更多信息請查看IT技術專欄

    更多信息請查看腳本欄目
    易賢網(wǎng)手機網(wǎng)站地址:詳解Python中的__new__()方法的使用

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網(wǎng)