Maison > Article > développement back-end > Explication détaillée de la nouvelle méthode spéciale python
object.__new__(cls[, ...])
Appelé pour créer une nouvelle instance de classe cls. __new__() est une méthode statique (dans une casse spéciale, vous n'avez donc pas besoin de la déclarer comme telle) qui prend la classe dont une instance a été demandée comme premier argument. Les arguments restants sont ceux passés à l'expression du constructeur d'objet (l'appel à la classe). La valeur de retour de __new__() doit être la nouvelle instance d'objet (généralement une instance de cls).
Les implémentations typiques créent une nouvelle instance de la classe en appelant la méthode __new__() de la superclasse à l'aide de super(currentclass, cls ).__new__(cls[, ...]) avec les arguments appropriés, puis en modifiant l'instance nouvellement créée si nécessaire avant de la renvoyer.
Si __new__() renvoie une instance de cls, alors __init__ de la nouvelle instance () sera invoquée comme __init__(self[, ...]), où self est la nouvelle instance et les arguments restants sont les mêmes que ceux transmis à __new__().
Si __new__() le fait ne renvoie pas d'instance de cls, la méthode __init__() de la nouvelle instance ne sera pas invoquée.
__new__() est principalement destinée à permettre aux sous-classes de types immuables (comme int, str ou tuple) de personnaliser l'instance. création. Il est également couramment remplacé dans les métaclasses personnalisées afin de personnaliser la création de classes.
调用产生一个新的类的实例,cls. __new__() est un produit de type __new__().象构造函数的表达式(对类的调用),__new()__的典型的实现方法就是在返回新生成的实例之前,调用父类的__new()__方法(super(currentclass, cls).__new__ (cls[, ...]))的)。
如果__new()_ _返回了一个cls的实例对象,然后就会调用这个新的实例的__init()__方法(__init__[,...]),self指新创建的实例其余的参数和传递给__new( )的一样。
如果__new()__没有成功返回一个cls的实例,就不会调用这个实例的init()方法。
__new ()__主要用来进行不可变类型(像是int,str,或者元组)的子类自定义实例的创建。也可以重写自定义元类来进行自定义类的创建。
举例:在实例化对象之前,下面的例子就是做一个去空格处理。
class Word(str): def __new__(cls,word): if ' ' in word: print("there is qutos") word = ''.join(word.split()) return str.__new__(cls,word) a = Word('hello sherry') print(a)
更多python特殊方法之new详解相关文章请关注PHP中文网!