2013-10-10 38 views
-3

最好的辦法考慮到這些類它是比較Python對象

class Foo(object): 
    def __init__(self, owner): 
     self.owner = owner 
     self.a = None 
     self.b = [] 

object = Foo(mike) 

每一個小時,我需要檢查,如果美孚更新(object.a或object.b已經改變) 我該怎麼辦?

我是否需要創建一個新對象object2 = Foo(mike)和parse屬性來與對象進行比較,將差異放入列表中還是存在pythonic方式來執行它?

如果創建兩個對象,解析它們來構建2個列表並比較它們是個好主意?

+0

「改變」是什麼意思?實例變量改變了嗎? – alexvassel

+1

'Foo'如何更新? –

+0

如果至少有一個對象屬性具有更新的值。元素在object.b列表中添加或刪除等。 Foo由不同函數更新。 – billyJoe

回答

0

如果您遇到此問題,請不要直接更改任何屬性。 改爲使用方法(例如,add_b(self,value),set_a(self,value)),您可以在其中控制發生的事情。

嘗試使用properties

E.g.

class Foo(object): 
    __owner = None 
    __changed = False 

    def __init__(self, owner): 
     self.__owner = owner 

    def get_owner(self): 
     return self.__owner 

    def set_owner(self, owner): 
     old_owner = self.__owner 
     if owner != old_owner: 
      self.__changed = True 
     self.__owner = owner 

    owner = property(get_owner, set_owner) 

    @property 
    def changed(self): 
     return self.__changed 

f = Foo('bar') 
print f.owner # bar 
f.owner = 'bar2' 
print f.owner # bar2 
print f.changed # True