class Outer(object):
outer_var = 1
class Inner(object):
@property
def inner_var(self):
return Outer.outer_var
Ce n'est pas tout à fait la même chose que ce qui se fait dans d'autres langages, et cela utilise la recherche globale au lieu de la recherche de l'accès à la fonction outer_var
. (Si vous changez l'objet dont le nom Outer
est lié, alors ce code utilisera cet objet lors de sa prochaine exécution).
Si vous voulez plutôt que tous les Inner
pour avoir une référence à un Outer
porque outer_var
est en réalité un attribut d'instance :
class Outer(object):
def __init__(self):
self.outer_var = 1
def get_inner(self):
return self.Inner(self)
# "self.Inner" is because Inner is a class attribute of this class
# "Outer.Inner" would also work, or move Inner to global scope
# and then just use "Inner"
class Inner(object):
def __init__(self, outer):
self.outer = outer
@property
def inner_var(self):
return self.outer.outer_var
Notez que l'imbrication des classes est plutôt rare en Python, et n'implique pas automatiquement une sorte de relation spéciale entre les classes. Il est préférable de ne pas les imbriquer. (Vous pouvez toujours définir un attribut de classe sur Outer
a Inner
si vous le souhaitez).