Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python @property decorator not working

Could anyone find a problem with this @property decorator? I cannot seem to get it to assert correctly. I'm sure I'm doing some really simple thing wrong, but can anyone point my tired eyes in the right direction please?

class A:
    def __init__(self):
        self.a = 0
        self._b = 0

    @property
    def b(self):
        return self.b

    @b.getter
    def b(self):
        if self._b is None:
            return 0
        return self._b

    @b.setter
    def b(self, val):
        self._b = (val * 20)


def test_getter_setter():
    obj = A()
    obj.a = 1
    #obj.b = 2
    print obj.a, obj.b
    obj.b = 2
    print obj.a, obj.b
    assert obj.b == 40

test_getter_setter()
like image 344
opensourcegeek Avatar asked Feb 06 '14 13:02

opensourcegeek


1 Answers

The @property decorator only works on new style classes. Inherit from object:

class A(object):

With that change your test function passes.

like image 83
Martijn Pieters Avatar answered Oct 19 '22 00:10

Martijn Pieters