2016-05-04 19 views
1

Lassen Sie sagen, ich habe diese Klasse:Python - Exklusiver Attributwert für Objekt?

class A(object): 
def __init__(self, one=None): 
    self.one = one 

Also jedes Mal, wenn Sie A Objekt zu erstellen, Sie one Attribut zuweisen können. Aber nur das letzte Objekt, dem kein falscher Wert zugewiesen wurde, behält es bei.

Zum Beispiel:

a = A('a') 
b = A('b') 
c = A() 
print a 
print b 
print c 
---- 
None 
b 
None 

Nun ist diese Objekte sind tatsächlich Datensätze (Zeilen) in der Datenbank, so dass diese später zugegriffen werden kann.

Was könnte ein gutes Muster (falls vorhanden) sein, um ein solches Attribut dynamisch zu setzen (unscharfes Attribut für ältere Objekte)?

+0

kann nicht nur Sie das Werk Muster verwenden? Dann können Sie den Überblick über das letzte Objekt behalten, das je nach Bedarf ein- und ausgeblendet wurde. – Schore

+0

Behalten Sie eine Liste von Instanzen (siehe zB http://stackoverflow.com/q/328851/3001761) und verwenden Sie eine Eigenschaft, um Ihre Einstellungs-/Deaktivierungslogik zu implementieren (siehe z. B. http://stackoverflow.com/q/17330160/3001761). – jonrsharpe

Antwort

1

Sie könnten eine Instanz in einer Klassenvariablen speichern und die vorherige in __init__ aufheben.

class A(object): 
    obj = None 
    def __init__(self, one=None): 
     self.one = one 
     if self.one: 
      if A.obj: 
       A.obj.one = None 
      A.obj = self 
    def __str__(self): 
     return str(self.one) 

Ergebnis:

>>> a = A('a') 
>>> b = A('b') 
>>> c = A() 
>>> print a 
None 
>>> print b 
b 
>>> print c 
None 
+0

@Andrius - Bitte beachten Sie die Bearbeitung hier. Ich weiß nicht, warum ich es ursprünglich geschrieben habe, um eine ganze "Liste" zu speichern, wenn nur die letzte benötigt wurde. – TigerhawkT3

Verwandte Themen