在方法中使用Python property()

时间:2010-07-21 17:22:20

标签: python properties decorator

假设您了解Python内置属性:http://docs.python.org/library/functions.html#property

我想以这种方式重新设置一个对象属性但是,我需要在一个方法内部做一些能够传递给它的一些参数,目前所有的web(例子)的web例子都定义了方法,并尝试显而易见的......

def alpha(self, beta):
  self.x = property(beta)

...似乎没有用,我很高兴如果你能告诉我我的概念错误或其他替代解决方案而没有子类化代码(实际上我的代码已经过度子类化)或使用装饰器(这是解决方案我如果没有其他的话,我会使用。

感谢。

2 个答案:

答案 0 :(得分:4)

属性使用描述符协议工作,该协议仅适用于类对象的属性。属性对象必须存储在class属性中。您无法在每个实例的基础上“覆盖”它。

当然,您可以在类上提供获取实例属性或回退到某些默认值的属性:

class C(object):
    _default_x = 5
    _x = None
    @property
    def x(self):
        return self._x or self._default_x
    def alpha(self, beta):
        self._x = beta

答案 1 :(得分:1)

在这种情况下,您需要在alpha()self.x = beta完成所有操作。如果要为属性实现getter和setter,请使用property,例如:

class Foo(object):
    @property
    def foo(self):
        return self._dblookup('foo')

    @foo.setter
    def foo(self, value):
        self._dbwrite('foo', value)

然后能够做到

f = Foo()
f.foo
f.foo = bar