7

任何人都可以找到這個@property修飾器的問題嗎?我似乎無法讓它正確地斷言。我確信我正在做一些非常簡單的事情,但任何人都可以將我疲憊的眼睛指向正確的方向嗎?Python @property修飾器不工作

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() 

回答

18

@property裝飾僅適用於新式類。從object繼承:

class A(object): 

隨着該更改,您的測試功能通過。

+1

grrrr ...謝謝! – opensourcegeek

+0

我所有的悲傷都神奇地消失了!謝謝,Martijn博士! – reggie