2016-05-04 14 views
1

レッツは、私はこのクラスを持っていると言う:Python - オブジェクトの排他的な属性値?

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

ですから、Aオブジェクトを作成するたびに、あなたがone属性を割り当てることができます。しかし、偽の値ではない最後のオブジェクトだけがそれを保持します。例えば

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

すぐこれらのオブジェクトは、データベース内の実際のレコード(行)であるので、それらは後にアクセスすることができます。

このような属性を動的に設定する(古いオブジェクトの属性を設定解除する)良いパターンは何でしょうか?

+0

は、あなただけのファクトリパターンを使用することができませんか?次に、必要に応じて1つのセットが設定されていない最後のオブジェクトを追跡できます。 – Schore

+0

インスタンスのリストを保持し(例えばhttp://stackoverflow.com/q/328851/3001761を参照)、プロパティを使用して設定/設定解除ロジックを実装します(例:http://stackoverflow.com/q/17330160/3001761を参照)。 )。 – jonrsharpe

答えて

1

インスタンスをクラス変数に格納し、前のインスタンスを__init__に設定解除することができます。

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) 

結果:

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

@Andrius - ここで編集してください。最後のものだけが必要なときに私が最初にそれを書いてなぜ全体のリストを保存するのか分かりません。 – TigerhawkT3

関連する問題