Fügen Sie der benutzerdefinierten Klasse entsprechende Methoden hinzu, damit die von der benutzerdefinierten Klasse erstellten Instanzen integrierte Funktionsoperationen wie integrierte Objekte ausführen können. Dies ist ein Funktionsumschreiben.
Objekt-zu-String-Funktion: repr(obj), gibt eine Ausdruckszeichenfolge zurück, die dieses Objekt darstellen kann, normalerweise eval(repr(obj)) == obj (diese Zeichenfolge wird normalerweise von Python interpretiert und ausgeführt, das zur Ausführung verwendet wird B. dem Programmierer), gibt str(obj) eine Zeichenfolge über das angegebene Objekt zurück (diese Zeichenfolge wird normalerweise von Menschen gelesen).
Methode zum Umschreiben von Objekten in String-Funktionen:
Repr(obj)-Methode zum Umschreiben von Funktionen:
Methode zum Umschreiben vondef __repr__(self):
str(obj)-Funktion:
def __str__(self):
Erklärung:
1. Die str(obj)-Funktion sucht zuerst, obj. Methode, rufen Sie diese Methode auf und geben Sie das Ergebnis zurück
2. Wenn es keine obj.__str__()-Methode gibt, geben Sie das Ergebnis der obj.__repr__()-Methode zurück und geben Sie
3 zurück Die obj.__repr__-Methode existiert nicht, dann wird beim Aufruf der __repr__-Instanzmethode der Objektklasse eine Zeichenfolge im Format <__main__.XXXX Objekt bei 0xAABBCCDD> angezeigt.
Beispiel:
# 此示例示意通过重写 repr 和 str方法改变转为字符串的规则 class MyNumber: def __init__(self, value): '构造函数,初始化MyNumber对象' self.data = value def __str__(self): '''转换为普通人识别的字符串''' # print("__str__方法被调用!") return "自定义数字类型对象: %d" % self.data def __repr__(self): '''转换为eval能够识别的字符串''' return 'MyNumber(%d)' % self.data n1 = MyNumber(100) n2 = MyNumber(200) print('repr(n1) ====>', repr(n1)) print('str(n2) ====>', str(n2))
Verwandte Empfehlungen: „Python-Video-Tutorial“
So schreiben Sie andere integrierte Funktionen neu:
__abs__ abs( obj) Funktion
__len__ len(obj) Funktion (muss eine Ganzzahl zurückgeben)
__reversed__ reversed(obj) Funktion (muss ein iterierbares Objekt zurückgeben
__round__ Round(obj) Funktion
Beispiel:
# 此示例示意abs 函数的重写 class MyInteger: def __init__(self, v): self.data = v def __repr__(self): return 'MyInteger(%d)' % self.data def __abs__(self): v = abs(self.data) return MyInteger(v) # 用v创建另一个MyInteger对象 def __len__(self): return 10000 I1 = MyInteger(-10) print('I1 =', I1) I2 = abs(I1) print("I2 =", I2) print('len(I2)=', len(I2)) # 10000
Umschreiben der numerischen Konvertierungsfunktion:
__complex__ complex(obj) Funktion
__int__ int(obj)-Funktion
__float__ float(obj)-Funktion
__bool__ bool(obj)-Funktion (siehe Boolesche Testfunktionsüberladung unten)
Beispiel :
# 此示例示意数据转换构造函数的重写方法 class MyNumber: def __init__(self, value): self.data = value def __repr__(self): return 'MyNumber(%d)' % self.data def __int__(self): 'int函数的重载' return self.data n1 = MyNumber(100) x = int(n1) print(n1) print(bool(n1)) # True n2 = MyNumber(0) print(bool(n2)) # True
Boolesche Testfunktion umschreiben:
Format:
__bool__
Funktion:
Wird für den Funktionswert bool(obj) verwendet.
Wird im Wahrheitswertausdruck der if-Anweisung verwendet.
Wird für den Wahrheitswert der while-Anweisung verwendet
Beschreibung im Ausdruck:
1. Wenn in der benutzerdefinierten Klasse eine __bool__(self)-Methode vorhanden ist, wird der Rückgabewert dieser Methode als bool( obj ) Rückgabewert
2. Wenn keine __bool__(self)-Methode vorhanden ist, gibt bool(x) zurück, ob der Rückgabewert der __len__(self)-Methode Null ist, um den booleschen Wert
zu testen 3. Wenn es keine __len__(self)-Methode gibt, wird True
direkt zurückgegeben. Beispiel:
# 此示例示意bool(x) 函数的重写 class MyList: '自定义类型的列表,用来保存数据,内部用一个列表来存储数据' def __init__(self, iterable=()): self.data = [x for x in iterable] def __repr__(self): return 'MyList(%s)' % self.data def __len__(self): '''返回长度''' print("__len__方法被调用") return len(self.data) def __bool__(self): print("__bool__方法调用") for x in self.data: if not x: return False return True # return False # <<=== 所有对象都为False myl = MyList([0, -1, 2, -3]) # myl = MyList() print(myl) print(bool(myl)) if myl: print("myl为真值") else: print('myl为假值')
Das obige ist der detaillierte Inhalt vonWie man das Umschreiben von Python-Funktionen versteht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!