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

Wie man das Umschreiben von Python-Funktionen versteht

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼Original
2019-06-25 15:43:333968Durchsuche

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

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 bbaa949d88dff9334356e024c335c20b 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(&#39;myl为假值&#39;)

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!

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