Разница между модулем и классом в 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']