Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung der neuen Python-Spezialmethode

Detaillierte Erklärung der neuen Python-Spezialmethode

高洛峰
高洛峰Original
2017-03-04 17:24:571275Durchsuche

object.__new__(cls[, ...])

Wird aufgerufen, um eine neue Instanz der Klasse cls zu erstellen. __new__() ist eine statische Methode (in Sonderfällen, sodass Sie sie nicht als solche deklarieren müssen), die die Klasse, deren Instanz angefordert wurde, als erstes Argument verwendet. Die übrigen Argumente werden an den Objektkonstruktorausdruck (den Aufruf der Klasse) übergeben. Der Rückgabewert von __new__() sollte die neue Objektinstanz sein (normalerweise eine Instanz von cls).

Typische Implementierungen erstellen eine neue Instanz der Klasse, indem sie die Methode __new__() der Oberklasse mit super(currentclass, cls) aufrufen ).__new__(cls[, ...]) mit entsprechenden Argumenten und dann die neu erstellte Instanz nach Bedarf ändern, bevor sie zurückgegeben wird.

Wenn __new__() eine Instanz von cls zurückgibt, dann wird die __init__ der neuen Instanz () Methode wird wie __init__(self[, ...]) aufgerufen, wobei self die neue Instanz ist und die verbleibenden Argumente dieselben sind, die an __new__() übergeben wurden.

Wenn __new__() dies tut keine Instanz von cls zurückgibt, wird die Methode __init__() der neuen Instanz nicht aufgerufen.

__new__() ist hauptsächlich dazu gedacht, Unterklassen unveränderlicher Typen (wie int, str oder tuple) die Anpassung der Instanz zu ermöglichen Schaffung. Es wird auch häufig in benutzerdefinierten Metaklassen überschrieben, um die Klassenerstellung anzupassen.

调用产生一个新的类的实例,cls. __new__()是一个静态方法(不需要声明), 类本身(cls)作为第一个参数,其他的的参数是传递给对象构造函数的表达式(对类的调用),__new()__的返回值应该是一个新的对象实例(一般是cls的实例).典型的实现方法就是在返回新生成的实例之前,调用父类的__new()__方法(super(currentclass, cls).__new__ (cls[, ...]))的)。

如果__new()_ _返回了一个cls的实例对象, 然后就会调用这个新的实例的__init()__方法(__init__[,...]), self指新创建的实例其余的参数和传递给__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中文网!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn