如何在python中使用@property更改属性?

时间:2016-05-13 00:12:21

标签: python class

我正在尝试使用python了解getter和setter。我理解基本的想法但我无法使用属性装饰器

来使用它
class f(object):
    def __init__(self):
        self.de = ['d', 'd']
    @property
    def d(self):
        return self.de
    @d.setter
    def d(self, value):
        self.d = value

f = f()
f.d(1)

当我运行它时,我得到一个类型错误; 'list object不可调用'

2 个答案:

答案 0 :(得分:0)

使用property的重点在于它在语法上与常规属性访问完全相同。所以:

f = f()
f.d = 1

(但是,我想你想在你的二传手中设置self.de = value。)

答案 1 :(得分:0)

以下是如何将属性与setter一起使用的示例。一些人想要注意:

  • 属性与属性类似,使用object.property获取属性。它们不是方法,所以你不要打电话。
  • 您可以像属性一样设置属性。设置属性后,将调用setter函数。在这种情况下,someLength.inFeet = 2.5
  • 你不应该尝试在里面设置属性 setter函数,即在self.inFeet = ... setter中使用inFeet。这将创建一个无限(递归)的setter调用循环。

例如:

class Length(object):
    def __init__(self, inInches):
        self.inInches = inInches

    @property
    def inFeet(self):
        return self.inInches / 12.

    @inFeet.setter
    def inFeet(self, valueInFeet):
        self.inInches = valueInFeet * 12.

someLength = Length(12.)
print someLength.inInches
# 12.0
print someLength.inFeet
# 1.0
someLength.inFeet = 2.5
print someLength.inInches
# 30.0