liw*_*ire 24 python class python-module
我可以为模块中的变量赋值.如果是,则类和模块之间有什么区别.
PS:我是个小家伙.如果它有助于解释.谢谢.
Mar*_*ers 25
Python中的类和模块之间存在巨大差异.
类是蓝图,允许您创建具有属性和绑定功能的实例.类支持继承,元类和描述符.
模块不能执行任何操作,模块本质上是内部类的单例实例module
,并且它们的所有全局变量都是module
实例上的属性.您可以根据需要操作这些属性(添加,删除和更新),但要考虑到这些属性仍然构成该模块中定义的所有代码的全局命名空间.
从Java的角度来看,这里的类并没有那么不同.然而,模块可以包含多个类; 函数和任何其他Python表达式的任何结果也可以是模块中的全局变量.
所以作为一般的球场指南:
然后将数据存储在对应用程序有意义的位置.全局状态进入模块(函数和类与全局状态一样,在开始时加载).其他所有内容都会进入其他数据结构,包括类的实例.
我可以为模块中的变量赋值吗?
总之是的。
的概念是module
指可以导入的单个 Python 文件(通过导入,您可以访问该模块中定义的变量/方法/类)。
它通常与概念一起讨论package
,这是一个文件夹__init__.py
. 一个包可以包含子包或模块,同时,与模块类似,可以定义要在其内部导入的变量/方法/类__init__.py
。
在 Python 中拥有模块/包的目的有点类似于在 Java 中拥有包:包含和分类可重用的代码,解决命名冲突等。
此外,Python 还有一个名为 的内置类module
,就像list
, tuple
, dict
(请注意,由于遗留原因,Python 内置类不遵循 CapWords 命名约定)。一种module
实例代表导入的模块/包。
当您使用该import
语句导入模块(单个 Python 文件)或包(带有 的文件夹__init__.py
)时,通常
1.module
将创建类的新实例
2. 您在该导入的 Python 文件中定义的类/方法/变量将是添加作为此module
实例的属性(如果是包,则__init__.py
添加其中定义的类/方法/变量)。
因此,由于它只是module
类的一个实例,您可以为该实例的属性和其他类实例操作赋值。
import math
print(type([1,2,3]))
print(type(math))
print(dir([1,2,3]))
print(dir(math))
Run Code Online (Sandbox Code Playgroud)
安慰:
<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']
Run Code Online (Sandbox Code Playgroud)
在 python 世界中,module
是python
.py 文件中的一个文件 (.py) package
。包是一个文件夹,__init__.py
在其根目录中。这是一种物理组织代码的方法(在文件和文件夹中)。
另一方面,class
是一种抽象,它收集data
(特征)和method
(行为)定义来表示特定类型的对象。这是一种以逻辑方式组织代码的方法。
一个模块可以有零个或一个或多个类。一个类可以在一个或多个 .py 文件(模块)中实现。
但通常,我们可以将一组变量和函数组织到一个类定义中,或者只是简单地将它们放在一个 .py 文件中并将其称为模块。
同样,在系统设计中,您可以进行复杂的逻辑建模,也可以跳过它直接进入物理建模。但是对于非常复杂的系统,最好不要跳过逻辑建模。对于更简单的系统,请转到 KISS。
这就是我决定在类或模块中组织代码的方式:
类应该是基于该蓝图创建(许多)对象实例的蓝图。此外,类可以有子类(继承)。
因此,如果我需要继承或(许多)实例化,我会在类定义(方法和属性)下收集函数和变量。
否则,我保持简单和愚蠢(KISS)并使用模块。
一个糟糕的类(应该是一个模块)的一个很好的迹象:你可以object methods and properties
用static methods and properties
.