¿Cómo funciona el decorador setter de Python?

Estoy iniciando Python, así que ten paciencia si me falta algo obvio. He leído sobre los decoradores y cómo funcionan, y estoy tratando de entender cómo se traduce esto:

class SomeObject(object): @property def test(self): return "some value" @test.setter def test(self, value): print(value) 

Por lo que he leído, esto debería convertirse en:

 class SomeObject(object): def test(self): return "some value" test = property(test) def test(self, value): print(value) test = test.setter(test) 

Sin embargo, cuando bash esto, me sale

 AttributeError: 'function' object has no attribute 'setter' 

¿Alguien puede explicar cómo funciona la traducción en ese caso?

La razón por la que se obtiene que AttributeError es que def test redefine la test en el ámbito de la clase. Las definiciones de funciones en las clases no son de ninguna manera especiales.

Tu ejemplo funcionaría así.

 class SomeObject(object): def get_test(self): return "some value" def set_test(self, value): print(value) test = property(get_test) test = test.setter(set_test) # OR test = property(get_test, set_test)