__init__ predeterminado para objetos de código
-
02-01-2020 - |
Pregunta
Encontré objetos de código en Python.Tengo curiosidad por saber qué hace cada una de las variables de los constructores.No hay mucha información sobre ellos en la función de ayuda incorporada, todo lo que obtuve fue:
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.
Obviamente esto no es muy informativo.¿Qué tipos espera cada una de estas entradas y qué hacen los valores? NOTA: Hice esta pregunta por curiosidad académica y no con ningún propósito de codificación específico.
Solución
Un objeto de código Python es principalmente un contenedor para sus atributos.Cada uno de los argumentos que ve para el constructor se convierte en un atributo con un co_
prefijo (por ej.el argcount
El argumento se convierte en co_argcount
atributo).
El constructor realiza un poco de validación, por lo que si los argumentos no son del tipo correcto, generará una excepción de inmediato (en lugar de fallar solo cuando el objeto de código se use más adelante).
En cuanto a lo que significan los argumentos y atributos, está documentado principalmente en una tabla grande en la documentación para el inspect
módulo.Aquí está la parte relevante:
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
los atributos co_freevars
y co_cellvars
No están documentados hasta donde puedo ver.Creo que están relacionados con cierres.