https://qiita.com/ganariya/items/fb3f38c2f4a35d1ee2e8
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.
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.
__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.
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.
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.
Recommended Posts