Powiedzmy, że w Pythonie masz publiczną metodę, której głównym celem jest pobranie wartości podstawowego atrybutu danych (tj. Wewnętrznego magazynu kopii zapasowych). Metoda może mieć leniwą logikę oceny, itp. Właściwość jest przykładem takiej metody.W języku Python, jaka jest preferowana konwencja nazywania dla magazynu wewnętrznego właściwości wewnętrznej?
Jest zatem naturalne, aby użyć tej samej nazwy dla metody i atrybutu danych, z wyjątkiem przedrostka podkreślenia dla atrybutu danych. Dla example--
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
(od Python's "property" documentation)
Ale jakie są korzystnymi konwencje czy metoda jest do użytku wewnętrznego i tak samo jest z prefiksem znaku podkreślenia? Przedrostek magazynu z dwoma wiodącymi znakami podkreślenia wywoła wymieszanie nazw, a więc nie jest idealny.
dwie możliwości może być:
def _get_x(self):
return self._x
def _x(self):
return self._x_
Python styl mówi drugi (dodanie podkreślenia), choć powinny być wykorzystywane tylko w celu uniknięcia konfliktów z zastrzeżonych słów kluczowych.
Cieszę się, że komentarze nie mogą mieć -1 wynik. –
Myślę, że posiadanie prywatnej nieruchomości wprowadzi w błąd wiele osób. Sugerowałbym wyprowadzenie własnej klasy z 'property' zwanej, być może,' cached_property' i zdefiniowanie '__get__', aby wywołać getter, jeśli jeszcze nie był, a jeśli tak, zwrócił wartość, która została zwrócona, gdy został wywołany. I zdefiniuj '__delete__', aby zapomnieć o wartości buforowanej. – Omnifarious
Właśnie napisałem jeden z nich dla siebie, aby sprawdzić, czy da się to zrobić. I rzeczywiście może, ale jest trochę brzydka i wymaga użycia słabych referencji, co oznacza, że klasa, w której znajduje się dana nieruchomość, musi być słabo referencyjna. – Omnifarious