1、__new__的作用
在Python中new方法與init方法類似,但是如果兩個都存在那么new閑執行。
在基礎類object中,new被定義成了一個靜態方法,並且需要傳遞一個參數cls。
Cls表示需要實例化的類,此參數在實例化時由Python解析器自動提供。
new()是在新式類中新出現的方法,它作用在構造方法init()建造實例之前,可以這么理解,在Python 中存在於類里面的
構造方法init()負責將類的實例化,而在init()調用之前,new()決定是否要使用該init()方法,因為new()可以調用其他類的
構造方法或者直接返回別的對象來作為本類 的實例。
2、new()方法的特性
new()方法是在類准備將自身實例化時調用。
new()方法始終都是類的靜態方法,即使沒有被加上靜態方法裝飾器;
3、實例
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 '{0}({1})'.format(self.__class__.__name__, self.__dict__) print(Person('Tom', 10)) print(Person('Mike', 200))
結果:
Person({'age': 10, 'name': 'Tom'})
None
