这是比较python对象的最佳方式

时间:2013-10-10 12:11:13

标签: python

考虑这些课程

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

object = Foo(mike)

每小时,我需要检查Foo是否更新(object.a或object.b已更改) 我该怎么办?

我是否需要创建一个新的对象object2 = Foo(mike)和parse属性来与对象进行比较,将差异放入列表中还是有pythonic方式来实现它?

如果创建两个对象,解析它们以构建2个列表并比较它们是个好主意吗?

1 个答案:

答案 0 :(得分: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