假设我有一个课程,我想制作很多类似的"属性风格"属性.例如:
class Foo(object):
    @property
    def foo(self):
        return self._foo
    @foo.setter
    def foo(self, val):
        self.update()
        self._foo = val
    @property
    def bar(self):
        return self._bar
    @bar.setter
    def bar(self, val):
        self.update()
        self._bar = val
    @property
    def baz(self):
        return self._baz
    @baz.setter
    def baz(self, val):
        self.update()
        self._baz = val
    def update(self):
        print "Updating..."
显然,这里有很多重复,并且很好地将其考虑在内.一种方法是创建一个返回属性的函数:
def create_property(var):
    def _setter(self, val):
        self.update()
        setattr(self, '_' + var, val)
    def _getter(self):
        return getattr(self, '_' + var)
    return property(_getter, _setter)
class Foo(object):
    foo = create_property("foo")
    bar = create_property("bar")
    baz = create_property("baz")
    def …