Consideremos el siguiente ejemplo:¿Cómo proteger los errores tipográficos cuando se establece el valor para los miembros de la clase?
class A():
def __init__(self):
self.veryImportantSession = 1
a = A()
a.veryImportantSession = None # ok
# 200 lines below
a.veryImportantSessssionnnn = 2 # I wanna exception here!! It is typo!
¿Cómo podría hacerlo de modo que una excepción será levantado si trato de establecer un miembro que no se encuentra en __init__
?
El código anterior no fallará cuando se ejecute, pero me da un tiempo divertido para solucionar los problemas.
Al igual que con str:
>>> s = "lol"
>>> s.a = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'a'
Gracias!
Puede obtener mejores respuestas si también explica por qué desea hacer esto. – detly
Los intentos de convertir Python en Java/C++ siempre me han dejado perplejo de la misma manera que el anti-patrón de Singleton. Si no quieres más de un Foo, no lo instales, si no quieres 'a.y' no lo vincules. Si desea restringir a su usuario de la biblioteca de formas misteriosas, está haciendo algo mal. – msw
bien, probablemente eso no es lo que realmente quiero hacer. El problema es que los objetos de la clase A se utilizan en muchos lugares del código, y el miembro "a" tiene una gran importancia. Digamos que su verdadero nombre es "superImportantSession". En caso de que haya hecho un error tipográfico en un lugar del código y haya escrito "a.superImportantSesssssion = 1", no obtendré ningún error cuando se ejecute esa línea de código. Pero me divertiré mucho para depurar el error. Probablemente tengo que usar setSession/getSession o smth así. – lstipakov