Класи проти модулів в Python


19

У Python є багато модулів (таких як re), які виконують певний набір дій. Ви можете зателефонувати до функцій цього модуля та отримати результати, а модуль в цілому має ідею за ним (в даному випадку, стосуючись регулярних виразів).

Класи, здається, роблять майже те саме, але вони, здається, використовують властивості трохи більше, ніж модулі.

Чим модулі відрізняються від класів? (Я знаю, що не можу підклас модуля, але це?) Коли я повинен використовувати клас замість модуля?


Чи знаєте ви, що коли ви викликаєте модульні методи, іноді модуль просто переходить до екземпляра класу? Дивіться, наприклад, randomмодуль. Я не пам'ятаю, чи це правда re, однак.
jscs

1
Пов'язана концепція, яку потрібно знати - Модуль проти пакета?
RBT

Відповіді:


12

Модуль python - це не що інше, як пакет для інкапсуляції коду для багаторазового використання. Модулі зазвичай, але не завжди, знаходяться в папці з __init__.pyфайлом всередині неї. Модулі можуть містити функції, а також класи. Модулі імпортуються за допомогою importключового слова.

У Python є спосіб ввести визначення у файл та використовувати їх у скрипті або в інтерактивному екземплярі інтерпретатора. Такий файл називається модулем; визначення з модуля можуть бути імпортовані в інші модулі або в основний модуль.

Дізнайтеся більше про модулі Python за цими посиланнями:

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

Класи, з іншого боку, можна визначити у вашому основному коді програми або всередині модулів, імпортованих вашою програмою. Класи - це код об'єктно-орієнтованого програмування і може містити властивості та методи.

Дізнайтеся більше про класи Python за цими посиланнями:

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


3
Тож непогано мати один модуль у модулі, навіть якщо цей клас має лише функції? Я відчуваю, що в цій ситуації я взагалі повинен просто скласти модуль, не створюючи класу. Чи є основне правило щодо використання класів замість модулів? (Це те, що я намагаюся задати ... Чи слід редагувати своє запитання, щоб зробити його більш зрозумілим?)
Pro Q

6
Ви можете створити кілька примірників класу, але ви не можете створити екземпляри модуля. Ви можете порівняти модулі зі статичними класами або одиночними клавішами.
Енеко Алонсо

1
Модулі не завжди знаходяться у папці з __init__.pyфайлом.
multigoodverse

1
@ProQ На таких мовах, як Python, де ви можете мати функції в модулях, а не в класах (на відміну від, скажімо, Java), це загалом хороша форма просто підтримувати статичні функції на рівні модуля. Класи мають на увазі випадки власного стану.
Турксарама

-2

Якщо це купа чистих функцій, наприклад re, я розміщую їх у модулі. Я використовую клас, коли знаю, що є стан, який я хочу зберегти з цим кодом (наприклад, файл, який читається одразу, але дані якого використовуються кількома функціями).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.