https://qiita.com/ganariya/items/fb3f38c2f4a35d1ee2e8
Afin d'étudier Python, j'ai copié une bibliothèque d'intelligence de groupe appelée acopy.
Dans acopy, de nombreuses grammaires et idiomes Python intéressants sont utilisés, et il est résumé que c'est utile parmi eux.
Cette fois, nous examinerons une fonction intégrée appelée vars
.
Il existe plusieurs fonctions intégrées en python, dont l'une s'appelle vars
.
vars (x)
renvoie l'attribut __dic__
de l'objet $ x $ sous forme de dictionnaire.
__dic__
est l'attribut dict d'un objet d'un module ou d'une instance de classe.
L'attribut dict contient les valeurs associées aux noms de toutes les propriétés définies sur l'objet.
Voyons dans un code simple que vars renvoie l'attribut __dic__
.
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()
Essayez d'utiliser vars
sur l'objet a de la classe A.
Ensuite, vous pouvez obtenir l'attribut __dic__
défini dans l'objet a de la classe A, c'est-à-dire toutes les informations d'instance de a dans le dictionnaire.
De plus, comme la table de symboles locale de la fonction est définie dans la fonction, si rien n'est spécifié dans vars, __dic__
de la table de symboles locale est renvoyée. Par conséquent, il renvoie un dictionnaire de x.
De cette façon, vars vous permet d'apprendre l'attribut __dic__
.
En utilisant vars, par exemple, toutes les informations sur une instance d'une classe peuvent être transmises à d'autres méthodes de classe. En effet, il peut être combiné avec une fonction appelée ** Unpack **.
Par exemple, jetez un œil au code ci-dessous.
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)
Tout d'abord, définissez une classe appelée KeywordPrinter qui convertit tous les dictionnaires en chaînes.
De plus, nous définirons une méthode avec l'attribut __repr__
dans la classe A afin que print puisse afficher une chaîne de caractères arbitraire, visant un état de débogage plus simple.
Maintenant, dans __repr__
, j'ai passé quelque chose appelé ** vars (self)
à KeywordPrinter.
Tout d'abord, obtenez les informations du dictionnaire de propriétés de l'instance a avec vars (self)
.
Ensuite, en le décompressant et en le passant à l'imprimante, le dictionnaire sera renvoyé sous forme de chaîne de caractères d'une manière facile à lire.
Ceci est un exemple extrême et ne doit pas être utilisé très souvent, mais dans le codage réel, il existe des situations où «je veux passer rapidement une variable locale» à d'autres méthodes, classes et fonctions. À ce stade, vous pourrez peut-être réduire la quantité de codage en utilisant «** vars (self)».
J'étudierai plus.
Recommended Posts