Spécifiquement, comment les variables libres sont-elles liées à la définition pour les méthodes d'une classe? Il est probablement quelque chose comme ceci:Quel est l'ordre de recherche des variables libres dans Python?
- scope => générer aucune fermeture fonction enfermant (temporaire) scope => générer la fermeture
- global (permanent) (il suffit de regarder vers le haut lorsque le corps de méthode exécute)
- soulever UnboundLocalError()
Voici deux exemples:
globalname = 0
class Test(object):
def method(self):
print globalname
print Test
def outer():
localname = 1
class Test(object):
def method(self):
print globalname
print localname
print Test
return Test
Test().method.__func__.__closure__
# None
outer()().method.__func__.__closure__
# (<cell at 0xb7d655b4: type object at 0x82412bc>, <cell at 0xb7d655cc: int object at 0x81b20b0>)
je ne pouvais pas trouver beaucoup de documentation sur spécifiquement comment ils sont traités au moment de la définition. L'explication ci-dessus est-elle correcte?
P.S. C'est essentiellement la seule chose que je pense est non intuitive à propos de Python. – katrielalex