свойство python getter / setter путаница

Я немного запутался в свойствах в python. Рассмотрим следующий код

class A: @property def N(self): print("A getter") return self._N @N.setter def N(self,v): print("A setter") self._N = v def __init__(self): self._N = 1 class B: @property def N(self): print("B getter") return self.aN @N.setter def N(self,v): print("B setter") self.aN = v def __init__(self): self.a = A() if __name__ == '__main__': b=B() bN = 2 print(bN, baN) bN = 3 print(bN, baN) 

B должен быть чем-то вроде обертки для A. Он использует геттеры и сеттеры для отображения свойств A на себе (конечно, это также можно сделать через наследование). Проблема в том, что она просто не работает так, как ожидалось, в python2.6, пока она работает в python3:

 > python2 test.py A getter (2, 1) A getter (3, 1) > python3 test.py B setter A setter B getter A getter A getter 2 2 B setter A setter B getter A getter A getter 3 3 

Я делаю что-то неправильно или где именно проблема?

One Solution collect form web for “свойство python getter / setter путаница”

A и B должны быть классами нового стиля в Python 2.x.

property([fget[, fset[, fdel[, doc]]]])

Возвращает атрибут свойства для классов нового класса (классы, которые выводятся из объекта ).

Итак, если вы выйдете из object

 class A(object): ... class B(object): ... 

Ваш код будет работать должным образом.

Python - лучший язык программирования в мире.