La réponse de Rafa Dowgird États :
Je pense que si la fonction est compilée à partir d'une chaîne, d'un flux ou importée d'un fichier compilé, alors vous ne pouvez pas récupérer son code source.
Cependant, il es Il est possible de récupérer le code source d'une fonction compilée à partir d'une chaîne de caractères, à condition que le code de compilation ait également ajouté une entrée dans le fichier linecache.cache
dict :
import linecache
import inspect
script = '''
def add_nums(a, b):
return a + b
'''
bytecode = compile(script, 'unique_filename', 'exec')
tmp = {}
eval(bytecode, {}, tmp)
add_nums = tmp["add_nums"]
linecache.cache['unique_filename'] = (
len(script),
None,
script.splitlines(True),
'unique_filename',
)
print(inspect.getsource(add_nums))
# prints:
# """
# def add_nums(a, b):
# return a + b
# """
C'est ainsi que le attrs
bibliothèque crée automatiquement diverses méthodes pour les classes, à partir d'un ensemble d'attributs avec lesquels la classe doit être initialisée. Voir leur code source ici . Comme l'explique la source, il s'agit d'une fonctionnalité destinée principalement à permettre aux débogueurs tels que PDB de parcourir le code.