用于获取和设置属性的Python装饰器

时间:2018-05-18 12:16:51

标签: python-2.7 oop

我试图创建一个多项式'在python类中,它采用一个以多项式系数作为输入的np数组,并且需要允许这个属性得到一个“get”。和'设置'我试图用装饰器来实现这个目的。但是,当我创建多项式对象的实例化时,好像它没有使用我的@ coefficient.setter方法,因为它没有打印字符串'设置系数'它似乎也没有使用@ coefficients.getter方法,因为它也没有打印它的字符串。 我可能错误地使用了装饰器吗?我使用spyder作为我的IDE,这可能是导致问题的原因吗?

class Polynomial ():

    __coefficients = None

     def __init__ ( self , coeffs ):
        self.coefficients = coeffs

    #INTERFACES FOR ATTRIBUTE : __coefficients

    @property
    def coefficients ( self ):
        print('getting coefficients')
        return self . __coefficients

    @coefficients.setter
    def coefficients ( self , coeffs ):
        print('setting coefficients')
        self . __coefficients = np . array ( coeffs )
        self . __order = self . __coefficients . size

    @coefficients . deleter
    def coefficients ( self ):
        del self . __coefficients

所以,举个例子:

 \>>fx = Polynomial([0,0,1])

不打印'设置系数'和

\>>fx.coefficients

不会打印出获得系数的信息' 当我尝试在其他方法中使用 order 属性时,我收到一条错误消息,指出多项式没有属性 order

1 个答案:

答案 0 :(得分:0)

我找到了我的问题的答案,结果是类需要从对象继承才能使用'setter'和'getter'装饰器,即我的类应该看起来像

class Polynomial(object):
    #....

另一个问题回答了这个问题:Why doesn't setter work for me?

我实际上并不知道为什么python中的'new style'类必须从对象继承的细节,如果有人知道确切答案的原因,我将不胜感激。