【问题标题】:Using Python property() inside a method在方法中使用 Python property()
【发布时间】:2011-03-19 03:18:30
【问题描述】:

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

我想以这种方式重新设置一个对象属性,但是我需要在一个方法内执行它才能向它传递一些参数,目前 property() 的所有 Web 示例都在定义之外的属性方法,并尝试显而易见的......

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

...似乎不起作用,我很高兴您能向我展示我的概念错误或其他替代解决方案,而无需子类化代码(实际上我的代码已经过度子类化)或使用装饰器(这是我的解决方案'如果没有其他就使用)。

谢谢。

【问题讨论】:

  • 你想做什么? alphabetax 是什么?

标签: python properties decorator


【解决方案1】:

属性使用描述符协议,它只适用于类对象的属性。属性对象必须存储在类属性中。您不能在每个实例的基础上“覆盖”它。

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

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

【讨论】:

    【解决方案2】:

    在这种情况下,您在alpha() 中需要做的就是self.x = beta。当你想为一个属性实现 getter 和 setter 时使用属性,例如:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-05
      • 2010-11-11
      • 2012-10-14
      相关资源
      最近更新 更多