Klasy a moduły w Pythonie

19

Python ma wiele modułów (takich jak re), które wykonują określony zestaw akcji. Możesz wywoływać funkcje tego modułu i uzyskiwać wyniki, a moduł jako całość ma za sobą pomysł (w tym przypadku dotyczy wyrażeń regularnych).

Klasy wydają się robić dokładnie to samo, ale wydają się również używać właściwości nieco więcej niż modułów.

W jaki sposób moduły różnią się od klas? (Wiem, że nie mogę podklasować modułu, ale czy to jest to?) Kiedy powinienem użyć klasy zamiast modułu?

Pro Q
źródło
Czy zdajesz sobie sprawę, że kiedy wywołujesz metody modułowe, czasami moduł po prostu przechodzi do instancji klasy? Zobacz na przykład randommoduł. Nie pamiętam jednak, czy to prawda re.
jscs,
1
Powiązana koncepcja wiedzieć - moduł vs. pakiet?
RBT,

Odpowiedzi:

12

Moduł python to nic innego jak pakiet do enkapsulacji kodu wielokrotnego użytku. Moduły zwykle, ale nie zawsze, znajdują się w folderze, w którym znajduje się __init__.pyplik. Moduły mogą zawierać funkcje, ale także klasy. Moduły są importowane za pomocą importsłowa kluczowego.

Python ma sposób na umieszczenie definicji w pliku i użycie ich w skrypcie lub w interaktywnej instancji interpretera. Taki plik nazywa się modułem; definicje z modułu można importować do innych modułów lub do modułu głównego.

Dowiedz się więcej o modułach Python pod tymi linkami:

https://docs.python.org/2/tutorial/modules.html (Python 2) https://docs.python.org/3/tutorial/modules.html (Python 3)

Z drugiej strony, klasy można zdefiniować w głównym kodzie aplikacji lub w modułach zaimportowanych przez aplikację. Klasy są kodowaniem programowania obiektowego i mogą zawierać właściwości i metody.

Dowiedz się więcej o klasach Python pod tymi linkami:

https://docs.python.org/2/tutorial/classes.html (Python 2) https://docs.python.org/3/tutorial/classes.html (Python 3)

Eneko Alonso
źródło
3
Więc nie jest źle mieć jedną klasę w module, nawet jeśli ta klasa ma tylko funkcje? Wydaje mi się, że w takiej sytuacji powinienem po prostu zrobić moduł bez tworzenia klasy. Czy istnieje podstawowa zasada określająca, kiedy używać klas zamiast modułów? (Właśnie o to próbuję zapytać ... Czy powinienem edytować moje pytanie, aby było bardziej jasne?)
Pro Q
6
Możesz utworzyć wiele wystąpień klasy, ale nie możesz utworzyć wystąpień modułu. Możesz porównać moduły do ​​klas statycznych lub singletonów.
Eneko Alonso
1
Moduły nie zawsze znajdują się w folderze z __init__.pyplikiem.
multigoodverse
1
@ProQ W językach takich jak Python, gdzie można mieć funkcje w modułach, a nie w klasach (w przeciwieństwie do, powiedzmy, Java), ogólnie dobrą formą jest utrzymywanie funkcji statycznych na poziomie modułu. Klasy implikują przypadki z własnym stanem.
Turksarama,
-2

Jeśli jest to garść czystych funkcji, np. reUmieszczam je w module. Korzystam z klasy, gdy wiem, że istnieje stan, który chcę zachować z tym kodem (np. Plik, który jest wczytywany raz, ale którego dane są używane przez kilka funkcji).

Greg Bell
źródło