Ich habe versucht, Eigenschaften anstelle von spezifischen Setter und Getters in meiner App zu verwenden. Sie erscheinen eher pythonisch und machen meinen Code im Allgemeinen lesbarer.Ich frage mich, ob ich nur Eigenschaften in Python verwenden sollte.
Besser lesbar bis auf ein Problem: Tippfehler.
das folgende einfache Beispiel (beachten Sie, meine Eigenschaften tatsächlich einige Verarbeitung tun, obwohl die hier Beispiele nur eine einfache Variable oder Rückkehr)
class GotNoClass(object):
def __init__(self):
object.__init__(self)
self.__a = None
def __set_a(self, a):
self.__a = a
def __get_a(self):
return self.__a
paramName = property(__get_a, __set_a)
if __name__ == "__main__":
classy = GotNoClass()
classy.paramName = 100
print classy.paramName
classy.paranName = 200
print classy.paramName
#oops! Typo above! as seen by this line:
print classy.paranName
Den Ausgang, wie jeder, der eng ein wenig liest, wird sehen ist:
100
100
200
Oops. Sollte nicht gewesen sein, außer für die Tatsache, dass ich einen Tippfehler gemacht habe - ich schrieb paranName (zwei ns) anstelle von paramName.
Dies ist einfach zu debuggen in diesem einfachen Beispiel, aber es hat mich in meinem größeren Projekt verletzt. Da Python glücklich eine neue Variable erstellt, wenn ich versehentlich eine Eigenschaft verwenden wollte, erhalte ich subtile Fehler in meinem Code. Fehler, die ich manchmal schwer aufspüren kann. Schlimmer noch, ich habe einmal den gleichen Tippfehler zweimal benutzt (einmal als ich eingestellt habe und später einmal als ich bekam), also schien mein Code zu funktionieren, aber viel später, als ein anderer Codezweig schließlich versuchte, auf diese Eigenschaft zuzugreifen (richtig) Ich habe den falschen Wert bekommen - aber ich habe einige Tage gebraucht, bis ich gemerkt habe, dass meine Ergebnisse nur ein bisschen ausgefallen sind.
Jetzt, da ich weiß, dass dies ein Problem ist, verbringe ich mehr Zeit, meinen Code zu lesen, aber idealerweise hätte ich einen Weg, diese Situation automatisch zu erfassen - wenn ich nur einen vermisse, kann ich einen Fehler einführen, der das nicht tut zeigen Sie sich, bis ein gutes Stück Zeit vergangen ist ...
Also frage ich mich, sollte ich nur auf gute alte Setter und Getters wechseln? Oder gibt es eine nette Möglichkeit, diese Situation zu vermeiden? Verlassen sich die Leute nur auf sich selbst, um diese Fehler manuell zu erfassen? Leider bin ich kein professioneller Programmierer, nur jemand, der versucht, hier bei der Arbeit etwas zu erledigen, und ich weiß nicht wirklich, wie ich das am besten angehen soll.
Danke.
P.S. Ich verstehe, dass dies auch einer der Vorteile von Python ist und ich beschwere mich nicht darüber. Ich frage mich nur, ob es besser wäre, explizite Setter und Getter zu verwenden.
Das gleiche passiert für einfache Attribute, ganz zu schweigen von lokalen Variablen. Es ist ein direkter Nebeneffekt des Designs der Sprache und der Versuch, es zu "reparieren", wird im Allgemeinen größere Probleme verursachen. Ich habe es jedoch nie als großes Problem empfunden. –
Das ist absolut richtig und nachdem ich gepostet habe, habe ich ein bisschen mehr darüber nachgedacht. Ich denke, der Grund, warum es mehr passiert, ist, dass ich mich jetzt so sehr auf Eigenschaften stütze (im Vergleich zu meinen alten Setter und Getter) und daher eher auf einen solchen Fehler stoße. Der Trick wird sein, das Problem so weit wie möglich zu minimieren und vorsichtiger zu sein. – Ben