真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中__new__方法的詳細教程

只有繼承于object的新式類才能有__new__方法,__new__方法在創(chuàng)建類實例對象時由Python解釋器自動調用,一般不用自己定義,Python默認調用該類的直接父類的__new__方法來構造該類的實例,如果該類的父類也沒有重寫__new__,那么將一直按此規(guī)矩追溯至object的__new__方法,因為object是所有新式類的基類,若需要自定義__new__方法,一般用法如下:

成都創(chuàng)新互聯(lián)公司制作網(wǎng)站網(wǎng)頁找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁設計,成都網(wǎng)站建設、網(wǎng)站制作,網(wǎng)站設計,企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務,680元做網(wǎng)站,已為數(shù)千家服務,成都創(chuàng)新互聯(lián)公司網(wǎng)站建設將一如既往的為我們的客戶提供最優(yōu)質的網(wǎng)站建設、網(wǎng)絡營銷推廣服務!

class Person(object):
    def __new__(cls):
        return  object.__new__(cls)

__new__至少要有一個參數(shù)cls,代表要實例化的類,此參數(shù)在實例化時由Python解釋器自動提供;__new__必須要有返回值,返回實例化出來的實例,可以return父類new出來的實例,或直接是object的new出來的實例。

object.new(cls)執(zhí)行完返回的結果為Person類的實例對象,如下:

class Person(object):
    def __init__(self):
        print("__init__")
        self.name="張三"
    def __new__(cls):
        print('__new__')
        ob = object.__new__(cls)#ob為Person實例對象
        print(ob)
        return ob
p1 = Person()
print(p1.name)


p1=Person()該語句主要做了以下工作:
首先調用Person的__new__方法,該方法通過object.new(cls)創(chuàng)建了Person實例對象,并返回。最后調用了該Person實例對象的__new__方法。

object.new()方法接收的參數(shù)是類對象,可以不是當前類對象cls,如果將cls換成其他類對象會發(fā)生什么呢,看下面代碼的運行結果:

class Dog(object):
    def __init__(self):
        self.name="旺財"
        print("Dog.__init__")
class Person(object):
    def __init__(self):
        self.name="張三"
        print("Person.__init__")
    def __new__(cls):
        print('__new__')
        ob = object.__new__(Dog)
        return ob
p1 = Person()
print(type(p1))


由結果得知p1是Dog類的實例,但是有個問題,Python解釋器沒有自動執(zhí)行__new__方法,由結果可以看出并沒有打印字符串__new__。若__new__()沒有正確返回當前類cls的實例,那__init__()將不會被調用。 我們可以在__new__方法中手動調用__new__方法(實際開發(fā)中好像沒什么用)

class Dog(object):
    def __init__(self):
        self.name="旺財"
        print("__init__")

class Person(object):
    def __init__(self):
        self.name="張三"
        print("__init__")
    def __new__(cls):
        print('__new__')
        ob = object.__new__(Dog)
        ob.__init__()
        return ob

p1 = Person()
print(type(p1))
print(p1.name)


新聞標題:Python中__new__方法的詳細教程
鏈接URL:http://weahome.cn/article/dsogdsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部