Heim > Backend-Entwicklung > Python-Tutorial > Wie man das Umschreiben von Python-Funktionen versteht

Wie man das Umschreiben von Python-Funktionen versteht

爱喝马黛茶的安东尼
Freigeben: 2019-06-25 15:43:33
Original
4112 Leute haben es durchsucht

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).

Wie man das Umschreiben von Python-Funktionen versteht

Methode zum Umschreiben von Objekten in String-Funktionen:

Repr(obj)-Methode zum Umschreiben von Funktionen:

Methode zum Umschreiben von
def __repr__(self):
Nach dem Login kopieren

str(obj)-Funktion:

def __str__(self):
Nach dem Login kopieren

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):
        &#39;构造函数,初始化MyNumber对象&#39;
        self.data = value
 
    def __str__(self):
        &#39;&#39;&#39;转换为普通人识别的字符串&#39;&#39;&#39;
        # print("__str__方法被调用!")
        return "自定义数字类型对象: %d" % self.data
 
    def __repr__(self):
        &#39;&#39;&#39;转换为eval能够识别的字符串&#39;&#39;&#39;
        return &#39;MyNumber(%d)&#39; % self.data
 
 
n1 = MyNumber(100)
n2 = MyNumber(200)
print(&#39;repr(n1) ====>&#39;, repr(n1))
print(&#39;str(n2)  ====>&#39;, str(n2))
Nach dem Login kopieren

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 &#39;MyInteger(%d)&#39; % self.data
 
    def __abs__(self):
        v = abs(self.data)
        return MyInteger(v)  # 用v创建另一个MyInteger对象
 
    def __len__(self):
        return 10000
 
I1 = MyInteger(-10)
print(&#39;I1 =&#39;, I1)
 
I2 = abs(I1)
print("I2 =", I2)
 
print(&#39;len(I2)=&#39;, len(I2))  # 10000
Nach dem Login kopieren

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 &#39;MyNumber(%d)&#39; % self.data
 
    def __int__(self):
        &#39;int函数的重载&#39;
        return self.data
 
n1 = MyNumber(100)
x = int(n1)
print(n1)
 
print(bool(n1))  # True
n2 = MyNumber(0)
print(bool(n2))  # True
Nach dem Login kopieren

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:
    &#39;自定义类型的列表,用来保存数据,内部用一个列表来存储数据&#39;
 
    def __init__(self, iterable=()):
        self.data = [x for x in iterable]
 
    def __repr__(self):
        return &#39;MyList(%s)&#39; % self.data
 
    def __len__(self):
        &#39;&#39;&#39;返回长度&#39;&#39;&#39;
        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(&#39;myl为假值&#39;)
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage