Python中 new 方法詳解及使用

2021-09-12 18:52:57 字數 1488 閱讀 1579

_new_的作用

在python中_new_方法與_init_方法類似,但是如果兩都存在那麼_new_閒執行。

在基礎類object中,_new_被定義成了乙個靜態方法,並且需要傳遞乙個引數cls。cls表示需例項化的類,此引數在例項化時由python解析器自動提供。

new()是在新式類中新出現的方法,它作用在構造方法init()建造例項之前,可以這麼理解,在python 中存在於類裡面的構造方法init()負責將類的例項化,而在init()呼叫之前,new()決定是否要使用該init()方法,因為new()可以呼叫其他類的構造方法或者直接返回別的物件來作為本類 的例項。 

new(方法的特性)

new()方法是在類準備將自身例項化時呼叫。 

new()方法始終都是類的靜態方法,即使沒有被加上靜態方法裝飾器。

例項class person(object):

def __init__(self, name, age):

self.name = name

self.age = age

def __new__(cls, name, age):

if 0 < age < 150:

return object.__new__(cls)

# return super(person, cls).__new__(cls)

else:

return none

def __str__(self):

return '()'.format(self.__class__.__name__, self.__dict__)

print(person('tom', 10))

print(person('mike', 200))

結果:person()

none

python3和python2中_new_使用不同

python2的寫法

注意python版本大於等於2.7才支援

class singleton(object):

def __new__(cls,args, *kwargs):

if not hasattr(cls,'_inst'):

print(cls)

cls._inst = super(singleton, cls).__new__(cls,args,*kwargs)

return cls._inst

python3的寫法

class singleton(object):

def __new__(cls,args, *kwargs):

if not hasattr(cls,'_inst'):

print(cls)

cls._inst = super(singleton, cls).__new__(cls)

return cls._inst

如果python3的寫法跟python2寫法一樣,那麼倒數第二行會報錯"typeerror: object() takes no parameters"

Python中 new 方法詳解及使用

new 的作用 在python中 new 方法與 init 方法類似,但是如果兩都存在那麼 new 閒執行。在基礎類object中,new 被定義成了乙個靜態方法,並且需要傳遞乙個引數cls。cls表示需例項化的類,此引數在例項化時由python解析器自動提供。new 是在新式類中新出現的方法,它作...

Python中 new 方法詳解及使用

new 的作用 在python中 new 方法與 init 方法類似,但是如果兩都存在那麼 new 閒執行。在基礎類object中,new 被定義成了乙個靜態方法,並且需要傳遞乙個引數cls。cls表示需例項化的類,此引數在例項化時由python解析器自動提供。new 是在新式類中新出現的方法,它作...

詳解python中的 new

python中的 new 方法的使用 一丶object類中對 new 方法的定義 class object staticmethod known case of new def new cls,more known special case of object.new t.new s,a new o...