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