2016-05-04 24 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

你就不能使用工廠模式?然後,您可以跟蹤最後一個有一個集合並且根據需要取消設置的對象。 – 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 - 請注意這裏的編輯。我不知道爲什麼我最初寫了它來存儲整個'list',只有最後一個是需要的。 – TigerhawkT3

相關問題