tipo - python: ¿por qué la propiedad de solo lectura se puede escribir?
tipo object python (2)
Para que esto funcione como usted espera, Test
debe ser una clase de nuevo estilo:
class Test(object):
^^^^^^^^
Esto se indica en la documentación de la property()
:
Devuelve un atributo de propiedad para clases de nuevo estilo (clases que derivan de un
object
).
Cuando convierto a Test
en una clase de nuevo estilo e intento cambiar de prop
, obtengo una excepción:
In [28]: t.prop=''Re-Init''
AttributeError: can''t set attribute
Estoy tratando de definir una clase con una propiedad de solo lectura en un Python; Seguí la documentación de Python y se me ocurrió el siguiente código:
#!/usr/bin/python
class Test:
def __init__(self, init_str):
self._prop = init_str
@property
def prop(self):
return self._prop
t = Test("Init")
print t.prop
t.prop = "Re-Init"
print t.prop
Ahora cuando intento ejecutar el código, aunque estoy esperando un error / excepción, veo que se ejecuta normalmente:
$ ./python_prop_test
Init
Re-Init
Mi versión de Python es 2.7.2. Lo que estoy viendo, se espera? ¿Cómo asegurarse de que una propiedad no se puede configurar?
Para usar propiedades debes usar clases de nuevo estilo. Para usar clases de estilo nuevo en Python 2, debe heredar de un object
. Cambia tu clase def a class Test(object)
.