Классы против модулей в Python

19

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

Классы, кажется, делают почти то же самое, но они также, кажется, используют свойства немного больше, чем модули.

Чем модули отличаются от классов? (Я знаю, что не могу создать подкласс модуля, но так ли это?) Когда мне следует использовать класс вместо модуля?

Pro Q
источник
Знаете ли вы, что когда вы вызываете методы модуля, иногда модуль просто проходит к экземпляру класса? Смотрите, например, randomмодуль. Я не помню, правда ли это re, однако.
ао
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, я помещаю их в модуль. Я использую класс, когда знаю, что есть состояние, которое я хочу сохранить с этим кодом (например, файл, который читается один раз, но данные которого используются несколькими функциями).

Грег Белл
источник