Vous pouvez bien sûr faire une recherche de l'objet quelle que soit la portée qu'elle est. Si l'objet est dans une portée globale, vous le trouverez en utilisant globals()[name]
s'il s'agit d'un attribut d'instance ou de classe que vous utiliserez getattr(obj_or_class, name)
. Cependant, vous pouvez utiliser un objet qui fait référence ou qui peut créer l'autre objet à la demande au lieu de devoir effectuer une recherche. Cela aurait l'avantage de ne pas avoir besoin de savoir où chercher l'autre objet. Par exemple:
class FootCreator:
def __init__(*args, **kwds):
self.args = args
self.kwds = kwds
def other(self, other):
self.other = other
def __call__(self):
try:
return self.feets
except:
pass
self.feets = Feets(other=self.other, *self.args, self.**kwds)
return self.feets
class Feets:
def get_other(self):
return self.other()
La solution où vous définissez la référence à l'autre explicitement après la création pourrait être non-OO, car il pourrait casser invariance (mais d'autre part, les objets ne sera pas complète tant que l'autre a été créé de toute façon). Une solution similaire serait de créer et d'initialiser l'objet séparément:
lf = Feets.__new__() # lf created, but not initialized yet
rf = Feets.__new__() # rf created, but not initialized yet
lf.__init__(..., other=rf) # initialize (existing) lf
rf.__init__(..., other=lf) # initialize (existing) rf
Pourquoi ne transmettez-vous pas l'instance au lieu du nom de la variable? 'LF = Pieds (x, x, x, RF)' – falsetru
Les deux instances sont créées séparément. RF = Pieds (x, x, x, LF) Je suppose que je ne peux pas passer RF à LF alors que RF n'est pas déjà créé – user2488
Que diriez-vous de définir l'attribut 'opposite' pour le premier objet plus tard? 'LF = Pieds (x, x, x, aucun); RF = Pieds (x, x, x, LF); LF.opposite = RF' – falsetru