Heim  >  Artikel  >  Backend-Entwicklung  >  Erfahren Sie mehr über die Magie von Python

Erfahren Sie mehr über die Magie von Python

青灯夜游
青灯夜游Original
2019-11-26 17:58:333043Durchsuche

Erfahren Sie mehr über die Magie von Python

Was ist die magische Python-Methode?

Die magische Methode ist so magisch wie ihr Name, sie kann Ihnen immer etwas geben, wenn Sie es brauchen Möglichkeiten, Ihre Ideen wahr werden zu lassen. Magische Methoden beziehen sich auf Methoden, die bereits in Python enthalten sind und von doppelten Unterstrichen umgeben sind. Diese Methoden werden automatisch aufgerufen, wenn bestimmte Operationen ausgeführt werden. Sie sind die Kristallisation der objektorientierten Weisheit von Python. Besonders für Anfänger ist es wichtig, die magischen Methoden von Python zu beherrschen.

Warum magische Python-Methoden verwenden?

Die Verwendung der magischen Methoden von Python kann Python freier machen, und magische Methoden können auch verwendet werden, wenn kein Umschreiben erforderlich ist. Sie werden unter der wirksam Wenn ein Umschreiben erforderlich ist, können Benutzer auch einige Methoden entsprechend ihren eigenen Anforderungen umschreiben, um ihre eigenen Erwartungen zu erfüllen. Und es ist bekannt, dass Python eine objektorientierte Sprache ist. Die grundlegende magische Methode von Python macht Python objektorientierter.

Name der Magic-Methode

Beschreibung

Grundlegende magische Methoden (häufiger verwendet)

__new__(cls[, ...]) 1. Die erste Methode, die beim Instanziieren eines Objekts aufgerufen wird
2. Seine Parameter werden zur Verarbeitung
direkt an die Methode __init__ übergeben 3.我们一般不会重写该方法
__init__(self[, ...]) 构造方法,初始化类的时候被调用
__del__(self) 析构方法,当实例化对象被彻底销毁时被调用(实例化对象的所有指针都被销毁时被调用)
__call__(self[, args...]) 允许一个类的实例像函数一样被调用:x(a, b) 调用 x.__call__(a, b)
__len__(self) 定义当被 len() 调用时的行为
__repr__(self) 定义当被 repr() 调用时的行为
__str__(self) 定义当被 str() 调用时的行为
__bytes__(self) 定义当被 bytes() 调用时的行为
__hash__(self) 定义当被 hash() 调用时的行为
__bool__(self) 定义当被 bool() 调用时的行为,应该返回 True 或 False
__format__(self, format_spec) 定义当被 format() 调用时的行为
  属性相关的方法
__getattr__(self, name) 定义当用户试图获取一个不存在的属性时的行为
__getattribute__(self, name) 定义当该类的属性被访问时的行为
__setattr__(self, name, value) 定义当一个属性被设置时的行为
__delattr__(self, name) 定义当一个属性被删除时的行为
__dir__(self) 定义当 dir() 被调用时的行为
__get__(self, instance, owner) 定义当描述符的值被取得时的行为
__set__(self, instance, value) 定义当描述符的值被改变时的行为
__delete__(self, instance) 定义当描述符的值被删除时的行为
  比较操作符
__lt__(self, other) 定义小于号的行为:x < y 调用 x.__lt__(y)
__le__(self, other)定义小于等于号的行为:x <= y 调用 x.__le__(y)
__eq__(self, other)定义等于号的行为:x == y 调用 x.__eq__(y)
__ne__(self, other)定义不等号的行为:x != y 调用 x.__ne__(y)
__gt__(self, other)定义大于号的行为:x > y 调用 x.__gt__(y)
__ge__(self, other) 定义大于等于号的行为:x >= y 调用 x.__ge__(y)
  算数运算符
__add__(self, other) 定义加法的行为:+
__sub__(self, other) 定义减法的行为:-
__mul__(self, other) 定义乘法的行为:*
__truediv__(self, other) 定义真除法的行为:/
__floordiv__(self, other) 定义整数除法的行为://
__mod__(self, other) 定义取模算法的行为:%
__divmod__(self, other) 定义当被 divmod() 调用时的行为
__pow__(self, other[, modulo]) 定义当被 power() 调用或 ** 运算时的行为
__lshift__(self, other) 定义按位左移位的行为:<<
__rshift__(self, other)定义按位右移位的行为:>>
__and__(self, other) 定义按位与操作的行为:&
__xor__(self, other) 定义按位异或操作的行为:^
__or__(self, other) 定义按位或操作的行为:|
  反运算(类似于运算方法)
__radd__(self, other)  当被运算对象(左边的操作对象)不支持该运算时被调用
__rsub__(self, other)  当被运算对象(左边的操作对象)不支持该运算时被调用
__rmul__(self, other)  当被运算对象(左边的操作对象)不支持该运算时被调用
__rtruediv__(self, other)  当被运算对象(左边的操作对象)不支持该运算时被调用 
__rfloordiv__(self, other)  当被运算对象(左边的操作对象)不支持该运算时被调用
__rmod__(self, other)  当被运算对象(左边的操作对象)不支持该运算时被调用
__rdivmod__(self, other)  当被运算对象(左边的操作对象)不支持该运算时被调用
__rpow__(self, other)  当被运算对象(左边的操作对象)不支持该运算时被调用
__rlshift__(self, other)  当被运算对象(左边的操作对象)不支持该运算时被调用
__rrshift__(self, other)   当被运算对象(左边的操作对象)不支持该运算时被调用
__rxor__(self, other)  当被运算对象(左边的操作对象)不支持该运算时被调用
__ror__(self, other)  当被运算对象(左边的操作对象)不支持该运算时被调用
  增量赋值运算
__iadd__(self, other) Definieren Sie das Verhalten der Zuweisungsaddition: +=
__isub__( self , other) Definieren Sie das Verhalten der Zuweisungssubtraktion: -=
__imul__(self, other) Definieren Sie das Verhalten der Zuweisungsmultiplikation: *=
__itruediv__(self, other) Definieren Sie das Verhalten der Zuweisungs-True-Division: /=
__ifloordiv__( self, other) Definieren Sie das Verhalten der Zuweisung Ganzzahldivision: //=
__imod__(self, other) Definieren Sie das Verhalten der Zuweisung Modulo-Algorithmus: %=
__ipow__(self, other[, modulo]) Definieren Sie das Verhalten der Zuweisungsleistungsoperation: **=
__ilshift__(self, other) Definieren Sie das Verhalten der bitweisen Linksverschiebung der Zuweisung: <<=
__irshift__(self, other )Definieren Sie das Verhalten der bitweisen Rechtsverschiebung der Zuweisung:>>=
__iand__(self, other) Definieren Sie das Verhalten von bitweise UND-Operation der Zuweisung: & =
__ixor__(self, other) Definieren Sie das Verhalten der Zuweisung bitweiser XOR-Operation: ^=
__ior__ (self, other) definiert das Verhalten der bitweisen ODER-Verknüpfung der Zuweisung: |=
Unärer Operator
__neg__(self) Definieren Sie das Verhalten des positiven Vorzeichens: +x
__pos__(self ) Definieren Sie das Verhalten negativer Zeichen: -x
__abs__(self) Definieren Sie das Verhalten beim Aufruf von abs()
__invert__(self) Definieren Sie das Verhalten der bitweisen Inversion: ~x
Typkonvertierung
__complex__(self) Definieren Sie das Verhalten beim Aufruf durch complex() (needs um den entsprechenden Wert zurückzugeben)
__int__(self) Definieren Sie das Verhalten beim Aufruf durch int() (muss den entsprechenden Wert zurückgeben)
__float__(self) Definieren Sie das Verhalten beim Aufruf durch float() (muss den entsprechenden Wert zurückgeben)
__round__(self[ , n]) Definieren Sie das Verhalten beim Aufruf durch Round() (muss den entsprechenden Wert zurückgeben)
__index__(self) 1 . Wenn das Objekt innerhalb eines Slice-Ausdrucks angewendet wird, implementieren Sie eine Ganzzahlumwandlung
2. Wenn Sie einen benutzerdefinierten numerischen Typ definieren, der beim Slicing verwendet werden kann, sollten Sie __index__
definieren 3. Wenn __index__ definiert ist, muss auch __int__ definiert werden und gibt denselben Wert zurück
Kontextverwaltung (mit Anweisung)
__enter__(self) 1 Definieren Sie das Initialisierungsverhalten bei Verwendung der with-Anweisung
2. Der Rückgabewert von __enter__ ist an das Ziel der with-Anweisung oder den Namen danach gebunden als
__exit__(self, exc_type, exc_value, Traceback) 1 . Definieren Sie, wann was der Kontextmanager tun soll, nachdem ein Codeblock ausgeführt oder beendet wurde
2. Wird im Allgemeinen verwendet, um Ausnahmen zu behandeln, Arbeiten zu bereinigen oder tägliche Arbeiten auszuführen, nachdem der Codeblock ausgeführt wurde
Containertyp (im Allgemeinen Wird zum Betreiben von Containerklassen verwendet)
__len__(self) Definieren Sie das Verhalten beim Aufruf durch len() (gibt im Allgemeinen die Länge der Containerklasse zurück). )
__getitem__(self, key) definiert das Verhalten beim Abrufen des angegebenen Elements im Container, äquivalent zu self[key]
__setitem__(self, key, value) Definieren Sie das Verhalten beim Festlegen des angegebenen Elements im Container, äquivalent zu self[key] = value
__delitem__(self, key) definiert das Verhalten beim Löschen des angegebenen Elements im Container, was del self[key] entspricht
__iter__(self) definiert beim Iterieren des Containers. Das Verhalten von Elementen in
__reversed__(self) definiert das Verhalten beim Aufruf durch reversed()
__contains__ (self, item) Definieren Sie das Verhalten bei Verwendung des Member-Testoperators (in oder nicht in)

Empfohlenes Lernen: Python-Video-Tutorial

Das obige ist der detaillierte Inhalt vonErfahren Sie mehr über die Magie von Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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