[Road to Intermediate] Verwenden Sie die in Python integrierten Funktionsvariablen

Link zur Zusammenfassung

https://qiita.com/ganariya/items/fb3f38c2f4a35d1ee2e8

Einführung

Um Python zu studieren, habe ich eine Group Intelligence Library namens acopy kopiert.

In acopy werden viele interessante Python-Grammatiken und -Sprachen verwendet, und es wird zusammengefasst, dass es unter ihnen nützlich ist.

Dieses Mal werden wir uns eine eingebaute Funktion namens "vars" ansehen.

Was ist vars?

In Python gibt es mehrere integrierte Funktionen, von denen eine als "vars" bezeichnet wird. vars (x) gibt das Attribut __dic__ des Objekts $ x $ als Wörterbuch zurück.

Was ist dic?

__dic__ ist das dict-Attribut eines Objekts eines Moduls oder einer Klasseninstanz. Das dict-Attribut enthält die Werte, die den Namen aller für das Objekt festgelegten Eigenschaften zugeordnet sind.

Konkretes Beispiel

Lassen Sie uns in einem einfachen Code sehen, dass vars das Attribut __dic__ zurückgibt.

class A:

    def __init__(self, x, y):
        self.x = x
        self.y = y


def f():
    x = 50
    print(vars())


a = A(10, 20)
'''
{'x': 10, 'y': 20}
'''
print(vars(a))

'''
{'x': 50}
'''
f()

Versuchen Sie, vars für Objekt a der Klasse A zu verwenden. Dann können Sie das Attribut __dic__ erhalten, das im Objekt a der Klasse A festgelegt ist, dh alle Instanzinformationen von a im Wörterbuch. Da die lokale Symboltabelle in der Funktion in der Funktion definiert ist, wird __dic__ der lokalen Symboltabelle zurückgegeben, wenn in vars nichts angegeben ist. Daher wird ein Wörterbuch von x zurückgegeben.

Auf diese Weise können Sie mit vars das Attribut __dic__ lernen.

Verwendung: Übergeben Sie alle Objekte

Mithilfe von vars können beispielsweise alle Informationen zu einer Instanz einer Klasse an andere Klassenmethoden übergeben werden. Dies liegt daran, dass es mit einer Funktion namens ** Unpack ** kombiniert werden kann.

Schauen Sie sich zum Beispiel den folgenden Code an.

class KeywordPrinter:

    @staticmethod
    def printer(**kwargs):
        text_arr = [f'(key = {key}, value = {kwargs[key]})' for key in kwargs.keys()]
        return ', '.join(text_arr)


class A:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return self.__class__.__name__ + KeywordPrinter.printer(**vars(self))


'''
A(key = x, value = 10), (key = y, value = 20)
'''
a = A(10, 20)
print(a)

Definieren Sie zunächst eine Klasse namens KeywordPrinter, die alle Wörterbücher in Zeichenfolgen konvertiert.

Darüber hinaus definieren wir eine Methode mit dem Attribut __repr__ in Klasse A, damit print eine beliebige Zeichenfolge ausgeben kann, um einen einfacheren Debug-Status zu erreichen.

Jetzt habe ich in "repr" etwas namens "** vars (self)" an KeywordPrinter übergeben. Holen Sie sich zuerst die Eigenschaftswörterbuchinformationen der Instanz a mit vars (self). Wenn Sie es dann entpacken und an den Drucker übergeben, wird das Wörterbuch auf einfach zu lesende Weise als Zeichenfolge zurückgegeben.

Dies ist ein extremes Beispiel und sollte nicht sehr oft verwendet werden. In der tatsächlichen Codierung gibt es jedoch Situationen, in denen "Ich möchte eine lokale Variable schnell übergeben" an andere Methoden, Klassen und Funktionen. Zu diesem Zeitpunkt können Sie möglicherweise die Codierungsmenge mithilfe von "** vars (self)" reduzieren.

Ich werde mehr lernen.

Verweise

Recommended Posts

[Road to Intermediate] Verwenden Sie die in Python integrierten Funktionsvariablen
[Road to Intermediate] Was sind Pythons * Argumente, ** Kwargs?
[Road to Intermediate Python] Definieren Sie die Funktion __getattr__ in der Klasse
Ein Weg zum mittleren Python
[Road to Intermediate Python] Rufen Sie eine Klasseninstanz wie eine Funktion mit __call__ auf
Weg zu Intermediate Linux: Network Edition
[Road to Intermediate] Grundlegendes zu Python-Eigenschaften
[Road to Intermediate Python] Verwenden Sie ternäre Operatoren
[Road to Intermediate Python] Zusammenfassung der Artikelverknüpfungen