2017-04-03 65 views
8

我可以为模块中的变量赋值吗?如果是,类和模块之间有什么区别。 PS:我是一个java的家伙。如果它有助于解释。谢谢。Python中模块和类之间的区别

+0

在Python模块,类,元类,等都是**所有对象**为好。您可以设置模块的参数。不同的是,一个类以'__init__'等特殊方式成形,等等。 –

+0

好吧,几乎是第一眼的区别:模块==文件,类==文件的一部分。然而,在Java中,人们倾向于(或者说被迫更好地说)每个文件结构都有一个类。否则,您可以这样做:'import time; time.my_variable = 1',然后您可以在范围内使用它。 – KeyWeeUsr

+4

您无法创建模块的实例。模块是* singletons *,只有一个副本存在。另一方面,您可以创建类的实例。这在Java *中没有什么不同。类支持继承,模块不支持。类支持元类,模块不支持。类支持描述符,模块不支持。 –

回答

9
  • 模块

    模块是包括Python定义和声明的文件。

由于doc说。

因此,Python中的模块只是一种组织代码的方式,它包含python类或只是函数。 如果你需要这些类或功能在你的项目中,你只需import他们。例如,python中的math模块只包含一堆函数,您只需调用那些(math.sin)。 只需看看这个question

另一方面,python类是类似于java类的东西,它只是以稍微不同的方式构造的。

5

还有巨大的 Python中的类和模块之间的差异。

类是允许您创建具有属性和绑定功能的实例的蓝图。类支持继承,元类和描述符。

模块不能做任何的这个,模块基本上单实例内部module,他们所有的全局都在module实例属性。您可以根据需要操作这些属性(添加,删除和更新),但要考虑到这些仍然构成该模块中定义的所有代码的全局名称空间。

从Java的角度来看,类在这里并不完全不同。然而,模块可以包含多于一个类;函数和任何其他Python表达式的结果也可以是模块中的全局变量。

所以作为一般看球指南:

  • 使用类作为蓝图该模型的问题域的对象。
  • 使用模块将功能收集到逻辑单元中。

然后将数据存储在对您的应用程序有意义的位置。全局状态进入模块(并且函数和类同样是全局状态,在开始时加载)。其他一切都进入其他数据结构,包括类的实例。

0

我可以为模块中的变量赋值吗?
总之是的。


module的概念指的是可以导入一个Python文件(通过导入,您有访问该模块中定义的变量/方法/类)。

它通常与package这个概念一起讨论,它是__init__.py的文件夹。一个包可以包含子包或模块,同时,与模块类似,可以在其__init__.py中定义要导入的变量/方法/类。

在Python中使用模块/包的目的与在Java中使用包类似:包含和分类可重用代码,解决命名冲突等。


此外,巨蟒也有一个名为module一个内建类,就像listtupledict(请注意,Python的内置类不遵循CapWords命名约定由于遗留原因)。 A 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)) 

控制台:

<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'] 
相关问题