Podkreślenia w nazwach zmiennych i funkcji

Na pewno nie umknęło Twojej uwadze, że w języku Python nazwy niektórych obiektów, zmiennych czy funkcji składają się z podkreśleń umieszczanych na początku, na końcu lub po obu stronach. Jest to celowy zabieg, konwencja i standard, który ma na celu uporządkowanie kodu zarówno pod względem semantycznym, funkcjonalnym jak i optycznym, czyli ułatwić jego czytanie. W dzisiejszym artykule wyjaśnię Ci jakie znaczenie mają podkreślenia w tych konkretnych przypadkach.

Czytelna nazwa zmiennej lub metody

Wymogi co do stosowania podkreśleń są jasno spisane w standardzie PEP8 – Style Guide for Python Code. PEP to zbiór dokumentów Python Enhancement Proposals. Można powiedzieć, że to takie standardy RFC dla języka programowania Python. I to właśnie w PEP8 znajdziemy wytyczne jak stosować podkreślenia.

Przede wszystkim powinniśmy stosować podkreślenia, aby nazwy obiektów były bardziej czytelne. Zapis to_jest_moja_zmienna jest bardziej czytelny niż ToJestMojaZmienna. Zresztą w nazwach funkcji i zmiennych nie powinniśmy używać wielkich liter, zatem to_jest_moja_zmienna jest o wiele bardziej czytelne niż tojestmojazmienna.

Specjalne znaczenie zmiennej w klasie

Obiektowo programować powinniśmy od samego początku. Może za wyjątkiem mikroaplikacji mieszczących się w jednym niezbyt rozbudowanym pliku. W każdym innym przypadku programowanie obiektowe nie tylko nie przeszkadza, ale i ułatwia nam tworzenie naszej aplikacji. Ale wiąże się też ze specjalnym podejściem do elementów tworzących obiekt.

class Programista:
  def __init__(self, imie, jezyk, doswiadczenie):
    self.imie = imie
    self._jezyk = jezyk
    self.__doswiadczenie = doswiadczenie

W powyższym przykładzie stworzyliśmy klasę z trzema zmiennymi. Każda z tych zmiennych jest innego typu, co rozróżniamy po liczbie podkreśleń, od których zaczyna się ich nazwa:

  • Public – zmienne publiczne nie zaczynają się od żadnego podkreślenia. Jest to domyślna forma każdej zmienne w języku Python. Odwołać się do nich możemy praktycznie z każdego miejsca naszego programu. 
  • Protected – zmienne chronione rozpoczynamy pojedynczym podkreśleniem. Dostęp do niej mamy tylko z poziomu danej klasy oraz klas pochodnych. Pamiętajmy jednak, że w tym przypadku jest to jedynie konwencja nazewnictwa, która ma ułatwić nam odróżnienie danego typu zmiennej. 
  • Private – zmienne prywatne rozpoczynają się dwoma podkreśleniami. Do nich mamy dostęp jedynie z poziomu danej klasy. W przeciwieństwie do zmiennych chronionych nie jest to tylko konwencja nazewnictwa a element składni semantycznej języka. Specjalne mechanizmy wbudowane w język Python zapobiegają użyciu zmiennych prywatnych poza klasą.

Unikanie konfliktów i specjalne zastosowanie

Jest pewna bardzo przyjemna technika, która pozwala nam na unikanie konfliktów z nazwami systemowymi. Wystarczy, że dodamy na końcu pojedyncze podkreślenie.

list_ = [1, 2, 3]

obiekt.funkcja(class_= 'NazwaKlasy')

W powyższych przykładach uniknęliśmy konfliktu z systemowymi nazwami dodając na końcu pojedyncze podkreślenie. Osobiście nie lubię tej metody. Wolę nazywać swoje zmienne w taki sposób by nie tworzyć potencjalnych konfliktów.

Oddzielną grupę stanowią specjalne nazwy i metody, tak zwane magic methods. Wyróżniamy je za pomocą podwójnych podkreśleń na początku i na końcu. Na pewno nie są Ci obce takie funkcje jak __init__ czy __len__. Pierwsza to znany nam konstruktor klasy, czyli pierwsza wywoływana funkcja, gdy tworzony jest obiekt.

class A:
  def __init__(self):
    pass

Możemy tworzyć własne specjalne metody, lecz raczej co do zasady powinniśmy tego unikać, a zdefiniowane systemowo magiczne metody powinniśmy stosować zgodnie z ich przeznaczeniem opisanym w dokumentacji.

E-BOOK

Zaczynasz swój pierwszy projekt związany z automatyzacją?

Ten e-book jest dla Ciebie! Zawiera sprawdzone podejście, które realizowałem w wielu projektach. Sprawdź co możesz zrobić, by odnieść sukces!


Subscribe
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

1 Komentarz
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Jed
Jed
13/07/2021 21:49

Bardzo pomocny arykuł, dzięki!

ZdradziĆ Ci sekretY udanego projektu automatyzacji?

(link otwiera się w nowym oknie)