_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...