Maison >développement back-end >Tutoriel Python >Explication détaillée de la nouvelle méthode spéciale python

Explication détaillée de la nouvelle méthode spéciale python

高洛峰
高洛峰original
2017-03-04 17:24:571357parcourir

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中文网!


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn