tutorial tipo objects obj examples def and python properties python-2.7 readonly private-members

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