Python: Wie soll ich Instanzvariablen zur Verfügung stellen?

Angenommen, ich habe:

class myclass: def __init__(self): self.foo = "bar" 

Wo der Wert von foo für Benutzer von myclass zur Verfügung stehen muss. Ist es in Ordnung, den Wert von foo direkt aus einer Instanz von myclass zu lesen? Soll ich eine get_foo-Methode zu myclass hinzufügen oder vielleicht eine foo-Eigenschaft hinzufügen? Was ist die beste Praxis hier?

5 Solutions collect form web for “Python: Wie soll ich Instanzvariablen zur Verfügung stellen?”

Die anwendbare Python-Maxime wäre "wir sind alle Erwachsene hier" – wenn Benutzer direkten Zugriff auf den Wert von foo benötigen, lassen Sie sie direkt darauf zugreifen. Ein Getter oder eine Eigenschaft wäre sinnvoll, wenn man einen Code ausführen muss, wenn man ihn abruft, sonst ist der direkte Weg am besten.

Außerdem kannst du es immer wieder transparent machen, wenn du es brauchst.

Ich denke, es sollte in Ordnung sein, um "foo" wie es ist. Auch wenn man es hinter einem "Getter" versteckt, kann ein eindringlicher Benutzer immer noch darauf zugreifen. Als tzaman erwähnte "wir sind alle erwachsene hier".

Wenn du die Verwendung ein bisschen beschränken möchtest (dh es schwerer zu setzen), kannst du es in Erwägung ziehen, es mit einer Eigenschaft auszusetzen. Eigenschaften sind besonders praktisch, wenn Sie ein Attribut aussetzen müssen, das auf anderen abgeleitet wurde.

Python Tutorial hat eine sehr schöne und prägnante Diskussion darüber, also check it out. Da gibt es keine Zutrittskontrolle in Python, und Empfehlung ist: Wenn es etwas gibt, das du in C ++ privat machen würdest, beginne den Namen mit einem _ in Python und "play nice". Ansonsten nur direkt darauf zugreifen

Mein Vorschlag, gehe für die einfachste! Zugriff direkt auf die Instanzvariablen.

Sie können argumentieren, dass, wenn Sie die innere Darstellung Ihrer Daten ändern, möchten Sie auf die Daten auf die gleiche Weise ohne Pflege der inneren Darstellung zugreifen. Aber hey ! Wenn du get_foo und set_foo hast, semantisch, bedeutet das, dass du eine Variable änderst. Also einfach so 🙂

PS: Ich liebe den Rubin-Ansatz dort 🙂

Hängt davon ab, was du meinst "von den Benutzern meiner Klasse". Ich denke, du redest von einem Klassenattribut, wie folgt:

 >>> class Myclass(object): ... foo = "bar" ... >>> a = Myclass() >>> a.foo 'bar' >>> b = Myclass() >>> b.foo 'bar' >>> Myclass.foo = "zot" >>> a.foo 'zot' >>> b.foo 'zot' >>> 
  • Python Super-Methode und rufen Alternativen
  • Python ist die beste Programmiersprache der Welt.