__init__ par défaut pour les objets de code
-
02-01-2020 - |
Question
J'ai trouvé des objets de code en Python.Je suis curieux de savoir ce que font chacune des variables des constructeurs.Il n'y a pas beaucoup d'informations à leur sujet dans la fonction d'aide intégrée. Tout ce que j'ai obtenu, c'est :
class code(object)
| code(argcount, nlocals, stacksize, flags, codestring, constants, names,
| varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])
|
| Create a code object. Not for the faint of heart.
Ce n’est évidemment pas très informatif.Quels types chacune de ces entrées attend-elle et que font les valeurs ? NOTE: J'ai posé cette question par curiosité académique et non dans un but de codage spécifique.
La solution
Un objet de code Python n'est principalement qu'un conteneur pour ses attributs.Chacun des arguments que vous voyez pour le constructeur devient un attribut avec un co_
préfixe (par ex.le argcount
l'argument devient le co_argcount
attribut).
Le constructeur effectue un peu de validation, donc si les arguments ne sont pas du bon type, il déclenchera immédiatement une exception (plutôt que d'échouer uniquement lorsque l'objet code est utilisé ultérieurement).
Quant à la signification des arguments et des attributs, elle est principalement documentée dans un grand tableau en la documentation pour le inspect
module.Voici la partie pertinente :
code co_argcount number of arguments (not including * or ** args)
co_code string of raw compiled bytecode
co_consts tuple of constants used in the bytecode
co_filename name of file in which this code object was created
co_firstlineno number of first line in Python source code
co_flags bitmap: 1=optimized | 2=newlocals | 4=*arg | 8=**arg
co_lnotab encoded mapping of line numbers to bytecode indices
co_name name with which this code object was defined
co_names tuple of names of local variables
co_nlocals number of local variables
co_stacksize virtual machine stack space required
co_varnames tuple of names of arguments and local variables
Les attributs co_freevars
et co_cellvars
ne sont pas documentés à ma connaissance.Ils sont liés aux fermetures, je pense.