Angenommen, Sie haben eine öffentliche Methode in Python, deren Hauptzweck es ist, den Wert eines zugrunde liegenden Datenattributs (d. H. Interner Sicherungsspeicher) abzurufen. Die Methode kann eine verzögerte Auswertungslogik usw. haben. Eine Eigenschaft ist ein Beispiel für eine solche Methode.Was ist in Python eine bevorzugte Namenskonvention für den Backing Store einer internen Eigenschaft?
Dann ist es natürlich, den gleichen Namen für die Methode und das Datenattribut zu verwenden, außer für ein Unterstrichpräfix für das Datenattribut. Für example--
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
(von Python's "property" documentation)
Aber was sind einige bevorzugte Konventionen, wenn das Verfahren für den internen Gebrauch bestimmt und so wird sich mit einem Unterstrich voran? Wenn Sie den Backing Store mit zwei führenden Unterstrichen vorfixieren, wird der Name Mangling aufgerufen und ist daher nicht ideal.
Zwei Möglichkeiten
def _get_x(self):
return self._x
def _x(self):
return self._x_
Python-Stil, sagt der zweite (Anfügen eines Unterstrichs) be-- könnte, sollte aber nur mit reservierten Schlüsselwörter um Konflikte zu vermeiden verwendet werden.
Ich bin froh, dass die Kommentare nicht -1 Punktzahl haben. –
Ich denke, eine private Immobilie wird viele Menschen verwirren. Ich würde vorschlagen, Ihre eigene Klasse von 'property' abzuleiten, vielleicht' cached_property', und definierend '__get__', damit sie den Getter aufruft, falls dies noch nicht geschehen ist, und falls dies der Fall ist, den zurückgegebenen Wert zurückgeben hieß. Und definieren Sie '__delete__', um den zwischengespeicherten Wert zu vergessen. – Omnifarious
Ich habe gerade eine davon für mich selbst geschrieben, um zu sehen, ob es gemacht werden könnte. Und das kann es auch, aber es ist ein bisschen hässlich und erfordert schwache Referenzen, was bedeutet, dass die Klasse, in die die Eigenschaft eingefügt wird, schwach referenzierbar sein muss. – Omnifarious