Betrachten Sie das folgende Beispiel:Wie kann man gegen Tippfehler schützen, wenn man den Wert für die Klassenmitglieder einstellt?
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!
Wie könnte ich es so machen, dass eine Ausnahme ausgelöst wird, wenn ich versuche, ein Mitglied zu setzen, die in __init__
nicht gesetzt ist?
Code oben wird nicht fehlschlagen, wenn es ausgeführt wird, aber gibt mir eine schöne Zeit, um die Probleme zu debuggen.
Wie bei str:
>>> s = "lol"
>>> s.a = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'a'
Dank!
Sie können bessere Antworten erhalten, wenn Sie auch erklären, warum Sie dies tun möchten. – detly
Versuche, Python in Java/C++ zu verwandeln, haben mich immer auf die gleiche Weise verwirrt wie das Singleton-Anti-Pattern. Wenn du nicht mehr als ein Foo willst, instanziiere es nicht, wenn du nicht willst, dass 'a.y' es nicht bindet. Wenn Sie Ihren Bibliotheksbenutzer auf mysteriöse Weise einschränken möchten, tun Sie etwas falsch. – msw
ok, wahrscheinlich ist das nicht, was ich wirklich will. Das Problem besteht darin, dass Objekte der Klasse A an vielen Stellen des Codes verwendet werden und Element "a" von großer Bedeutung ist. Lassen Sie uns sagen, dass es richtiger Name ist "superImportantSession". Wenn ich einen Tippfehler an einer Codestelle gemacht habe und "a.superImportantSesssssion = 1" geschrieben habe, bekomme ich keinen Fehler, wenn diese Codezeile ausgeführt wird. Aber ich werde Spaß haben, den Fehler zu debuggen. Wahrscheinlich muss ich setSession/getSession oder etw so verwenden. – lstipakov