在方法中使用Python的property()
假设你对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