Widziałem kod, w którym funkcje / stałe są poprzedzone podkreśleniem. Moim zrozumieniem jest to, że wskazuje, że nie są one używane bezpośrednio. Czy mogę to zrobić z klasami?

class _Foo(object):
    pass

class __Bar(object):
    pass
8
canadadry 30 wrzesień 2011, 15:11

4 odpowiedzi

Najlepsza odpowiedź

Lepiej używać tylko jednego _. Oznacza to, że nazwa jest prywatna w module.

Nie jest importowany za pomocą przyciągania wszystkich from <module> import * i ma kilka innych funkcji, takich jak "preferowane zniszczenie".

Z _).

Z Oto:

Począwszy od wersji 1.5, Python gwarantuje, że Globals, których nazwa zaczyna się od jednego podkreślenia, zostaną usunięte z ich modułu przed usunięciem innych globalnych.

Podwójnie podkreślenia Członkowie klasy startowej są

glglgl 30 wrzesień 2011, 11:31

Tak; Pojedyncze wykorzystanie podkreślenia jest zatwierdzane przez PEP8 do zajęć wewnętrznych.

Nie wierzę, że podwójne wykorzystanie podkreśla będzie miało jakiś czas na jakiś czas przez większość czasu, ponieważ jest używany do aktywnej nazwy zmogliwa dla atrybutów klasy, a ogólnie klasa nie jest atrybutem innej klasy (przyznanej, to Bądź, w którym to przypadku Python z radością zabrałam dla ciebie imię.)

6
Wooble 30 wrzesień 2011, 11:20

Tak, a to nie tylko konwencja. Kiedy import * z tego modułu nazwy począwszy od podkreślenia nie będą importowane.

2
ayanami 30 wrzesień 2011, 11:24

Możesz użyć pojedynczego podkreślenia jako pierwszego znaku w dowolnej zmiennej, ale niesie sugerowane znaczenie, "Nie używaj poza klasą / moduł, chyba że naprawdę wiesz, co robisz" (np. Zamierzony chroniony / wewnętrzny) I nie zauważy, czy użyjesz from <module> import *.

Korzystanie z podwójnego podkreślenia jest czymś, czego nigdy nie powinieneś robić poza klasą, ponieważ mogłoby bałagan z nazwą, w przeciwnym razie (i przez "mogłoby", to znaczy "spowodowało mi wielki ból głowy w ostatnim tygodniu, ponieważ nie zdawałem sobie sprawy, że tak" ).

2
cwallenpoole 30 wrzesień 2011, 11:27