Vous pouvez faire un générique « Référence() » classe, qui gardent toute référence lui-même dans un attributs Dictionnary.
class Reference(object):
def __init__(self):
self.references = {}
def __setattr__(self, key, value):
if hasattr(self, 'references'):
if isinstance(value, Reference):
if not key in value.references:
value.references[key] = []
value.references[key].append(self)
elif value is None and hasattr(self, key):
old = getattr(self, key).references
if key in old and self in old[key]:
old[key].remove(self)
super(Reference, self).__setattr__(key, value)
Et puis, créez vos classes:
class A(Reference):
def __init__(self):
super(A, self).__init__()
self.att = None
class B(Reference):
def __init__(self):
super(B, self).__init__()
self.att = None
et de l'utiliser:
a = A()
b = B()
print 'A references', a.references
print 'B references', b.references
# A references {}
# B references {}
a.att = b
print 'A references', a.references
print 'B references', b.references
# A references {}
# B references {'att': [<__main__.A object at 0x7f731c8fc910>]}
A la fin, vous aurez de nouveau référence à toute la classe de référence de toutes les propriétés
Veuillez lire l '[aide à la modification] (http://stackoverflow.com/editing-help) et reformater votre message. –
Est-ce que att est un attribut de la classe A ou d'une instance de la classe? – martineau
att est un attribut de classe A. Merci beaucoup pour les réponses rapides !! – jeffrey