Python portée à l'intérieur d'une fonction imbriquée à l'intérieur d'une classe?
Comment puis-je définir une variable de classe de l'intérieur d'une fonction à l'intérieur d'une autre fonction?
var.py
class A:
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
def seta(self):
def afunction():
self.a = 4
afunction()
def geta(self):
return self.a
run.py
cA = A()
print cA.a
cA.seta()
print cA.a
print cA.geta()
python run.py
1
1
1
pourquoi un pas égal à 4 et comment puis-je la rendre égale à 4?
Grâce
Désolé, mon code d'origine comme afunction appelé oublié.
Edit:
Merci à tous - désolé, je viens de voir maintenant. J'ai accidentellement a été désactivé par un _ dans l'un de mes noms.... donc, mon champ d'action est en fait tout est ok.
Vous n'avez même pas appelé
Vous ne devez pas modifier votre code pour la réponse. Il est inutile, si nous devons regarder à travers des révisions pour voir ce que la question a été répondu.
afunction()
dans votre code.Vous ne devez pas modifier votre code pour la réponse. Il est inutile, si nous devons regarder à travers des révisions pour voir ce que la question a été répondu.
OriginalL'auteur Eiyrioü von Kauyf | 2013-01-16
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est qu'il y a plusieurs
self
variables. L'argument passé dans votre intérieur de la fonction remplace la portée de l'extérieur.Vous pouvez surmonter ce problème en supprimant la
self
paramètre de la fonction interne, et assurez-vous d'appeler cette fonction en quelque sorte.OriginalL'auteur jimbojw
Comme d'autres l'ont mentionné,
afunction
n'est jamais appelée. Vous pourriez faire quelque chose comme ceci:Ici, nous avons fait appel
afunction
et explicitement passerself
, mais c'est un peu idiot de définir l'attributa
, surtout quand on peut le faire explicitement, sans la nécessité pour les getters ou setters:a.a = 4
Ou vous pourriez
return
la fonction:et puis dans le code:
OriginalL'auteur mgilson
À l'intérieur de
seta
, vous définissez une fonction...que serait ensemble
self.a
à 4 si il ne sera jamais appelé. Mais il ne s'appelle pas n'importe où, donca
est inchangé.OriginalL'auteur Anton Kovalenko
Comme plusieurs autres l'ont dit, vous devez réellement appel functiona à un certain point. Les commentaires ne me laisse pas le type de ce intelligably alors, voici une réponse:
missing 1 required positional argument: 'self'
. Vous aurez besoin de faire appelfunctiona(self)
mais toujours cette solution est redondante de la définition de fonction imbriquée.Vous n'avez pas remarqué que c'était la définition de quelque chose dans la portée d'une classe dans la question d'origine.
OriginalL'auteur Charlie Martin
Comment pouvez-vous faire assimiler à 4:
Partie délicate: Pourquoi n'est pas synonyme de 4...
Actuellement est fixé à 4 uniquement via "afunction". Depuis afunction n'est jamais appelée, il ne s'exécute jamais.. Le seta a "afunction" imbriquées à l'intérieur, mais ne l'appelle pas... similaire pour les variables membres au sein d'un classs.
OriginalL'auteur spooky