在方法中使用Python的property()

3 投票
2 回答
2383 浏览
提问于 2025-04-16 01:38

假设你对Python内置的属性(property)有一些了解:http://docs.python.org/library/functions.html#property

我想以这种方式重新设置一个对象的属性,但我需要在一个方法里面这样做,以便能够传递一些参数。目前网上所有关于property()的例子都是在方法外面定义属性,然后尝试一些显而易见的方法...

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

...似乎都不管用。如果你能告诉我我的概念错误在哪里,或者给我一些其他的解决方案,而不需要重新定义类(其实我的代码已经有点过度继承了)或者使用装饰器(如果没有其他办法,我会用这个)。

谢谢。

2 个回答

1

在这种情况下,你只需要在你的 alpha() 函数里写 self.x = beta。当你想为一个属性实现获取和设置的功能时,就可以使用属性(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
5

属性是通过一种叫做描述符协议的方式来工作的,这种方式只适用于类对象的属性。属性对象必须存储在类的属性中。你不能在每个实例上单独“覆盖”它。

当然,你可以在类中提供一个属性,这个属性可以获取实例的属性,或者使用一些默认值:

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

撰写回答