padrão __init__ para objetos de código
-
02-01-2020 - |
Pergunta
Encontrei objetos de código em Python.Eu estou curioso para saber o que cada uma das variáveis no construtores de fazer.Não há muita informação sobre eles no grupo builtin função de ajuda tudo que eu consegui foi:
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.
Que obviamente não é muito informativo.Quais são os tipos de cada um destes insumos esperar, e o que fazem os valores? NOTA: Eu fiz essa pergunta fora do acadêmico curiosidade, e não por qualquer específicos de codificação finalidade.
Solução
Um Python de código objeto é mais apenas um recipiente para seus atributos.Cada um dos argumentos para o construtor torna-se um atributo com um co_
prefixo (por exemplo,o argcount
argumento torna-se o co_argcount
atributo).
O construtor faz um pouco de validação, então, se os argumentos não são do tipo certo, ele irá gerar uma exceção de imediato (ao invés de incluir somente a falhar quando o código objeto é usada mais tarde).
Como para que os argumentos e atributos de dizer, que é principalmente documentado em uma grande mesa de a documentação para a inspect
módulo.Aqui está a 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
Os atributos co_freevars
e co_cellvars
não são documentados, tanto quanto eu posso ver.Eles estão relacionados ao fechamento, eu acho.