Разница между модулем и классом в Python

могу ли я присвоить значение переменной в модуле. Если да, то в чем разница между классом и модуль.

PS: Я парень java. В случае, если это помогает в способе объяснения. Спасибо.

3 ответов


  • модуль:

    модуль-это файл, содержащий определения и операторы Python.

как doc сказать.

таким образом, модуль в python-это просто способ организовать код, и он содержит либо классы python, либо просто функции. Если вам нужны эти классы или функции в вашем проекте, вы просто import них. Например,math модуль в Python содержит только куча функций, и вы просто называете их необходимыми (math.sin). Просто взгляните на это вопрос.

С другой стороны, класс python чем-то похож на класс java, он только структурирован немного по-другому.


здесь огромный различия между классами и модулями в Python.

классы-это чертежи, которые позволяют создавать экземпляры с атрибутами и связанной функциональности. Классы поддерживают наследование, метаклассы и дескрипторы.

модули не могут сделать ничего из этого, модули по существу единичные экземпляры внутреннего module класс, и все их глобалы являются атрибутами на module экземпляра. Вы можете манипулировать ими атрибуты по мере необходимости (добавить, удалить и обновить), но учтите, что они по-прежнему образуют глобальное пространство имен для всего кода, определенного в этом модуле.

С точки зрения Java классы здесь не так уж и отличаются. Однако модули могут содержать более одного класса; функции и любой результат любого другого выражения Python также могут быть глобалами в модуле.

Так как общее руководство ballpark:

  • использовать классы в качестве основы для объектов это модель вашего проблемного домена.
  • используйте модули для сбора функциональных возможностей в логические блоки.

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


могу ли я присвоить значение переменной в модуле?
Короче да.


концепция module относится к одному файлу Python, который может быть импортирован (при импорте у вас есть доступ к переменным/методам/классам, определенным в этом модуле).

это обычно обсуждается вместе с концепцией package - папку с __init__.py. Пакет может содержать вложенные пакеты или модули, и в то же время, подобно модулям, может определять переменные / методы / классы, импортируемые внутри its __init__.py.

цель наличия модулей / пакетов в Python похожа на наличие пакетов в Java: содержать и классифицировать многоразовые коды, разрешать конфликт имен и так далее.


кроме того, Python также имеет встроенный класс с именем module, так как list, tuple, dict (обратите внимание, что встроенные классы Python не следуют соглашению об именах CapWords из-за устаревших причин). Ля module экземпляр представляет импортированный модуль / пакет.

при использовании import инструкция для импорта модуля (одного файла Python) или пакета (папка с __init__.py), как правило
1. новый экземпляр module класс будет создан
2. классы / методы / переменные, определенные в этом импортированном файле Python, будут добавлены в качестве атрибутов этого module экземпляр (если это пакет, то это будут классы/методы/переменные, определенные в __init__.py что добавлен.)

поэтому, поскольку это всего лишь экземпляр module class, вы можете назначить значение атрибуту этого экземпляра и других операций экземпляра класса.

import math

print(type([1,2,3]))
print(type(math))
print(dir([1,2,3]))
print(dir(math))
:
<class 'list'>
<class 'module'>
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']