Python - programowanie obiektowe

0

Zacząłem się zagłębiać w programowanie obiektowe w pythonie, bo wcześniej wszystko robił bardziej funkcjami. Mam takie pytanie. Na jednej stronce znalazłem opis:

class Osoba:
    def __init__(self, imie, nazwisko, wiek):
        self.imie = imie
        self.nazwisko = nazwisko
        self.wiek = wiek
    def przedstaw_sie(self):
        print(f"Jestem {self.imie} {self.nazwisko}. Mam {self.wiek} lat.")
    def urodziny(self):
        wiek_przed = self.wiek
        self.wiek += 1
        return wiek_przed
def main():
    # tworzymy dwa obiekty klasy Osoba
    Jan = Osoba("Jan", "Nowak", 48)
    Adam = Osoba("Adam", "Mickiewicz", 220)
    
    # wywołujemy metodę przedstaw_sie() na każdym z nich
    Jan.przedstaw_sie()
    Adam.przedstaw_sie()
    
    wiek_Adama_przed = Adam.urodziny()
    Adam.przedstaw_sie()
    print(f"Wiek Adama sprzed urodzin: {wiek_Adama_przed}")
    
    # odwołujemy się do pól, modyfikujemy je
    Jan.imie = "Stanisław"
    Jan.nazwisko = "Witkiewicz"
    Jan.wiek = 133
    
    Jan.przedstaw_sie()
if __name__ == "__main__":
    main()

## Jestem Jan Nowak. Mam 48 lat.
## Jestem Adam Mickiewicz. Mam 220 lat.
## Jestem Adam Mickiewicz. Mam 221 lat.
## Wiek Adama sprzed urodzin: 220
## Jestem Stanisław Witkiewicz. Mam 133 lat.

Zastanawiam się po co się daje to

if __name__ == "__main__":
    main()

Zamiast po prostu

main()

Po co to if?

Czy często używa się programowania obiektowego w Pythonie i uwas w pracy? Bo wszędzie Pythona to przede wszystkim uczą funkcyjnie

1

Ale ten main nie ma nic wspólnego z klasami.

if jest po to, żeby main uruchomił się tylko wtedy, gdy wykonujesz bezpośrednio plik, a nie importujesz tego pliku w innym programie. I tyle.

1

W Pythonie można programować zarówno obiektowo jak i funkcyjnie. Wszystko zależy od aplikacji nad którą pracujesz, modułu, który tworzysz, skryptu, który rozwijasz i celu, który chcesz osiągnąć. Jeżeli chcesz stworzyć REST API przy pomocy np. Flaska to OOP ma sens. Jeżeli tworzysz jakiś skrypt eksploracyjny tworząc PoC, implementując modele ML wtedy OOP nie dokońca się sprawdzi zwłaszcza na samym początku Twoich badań.

W Twoim przykładzie wyobraź sobie, że nie masz tych dwóch lini kodu:

if __name__ == '__main__':
    main()

lecz masz main()

  1. importując cały moduł będziesz wykonywał main() za każdym razem gdy wykonujesz import nie koniecznie chcąc odpalać main()
  2. nie wywołasz np. multiprocessing.Pool()

1 użytkowników online, w tym zalogowanych: 0, gości: 1