Python模块用法

时间:2017-04-18 09:30:57

标签: python

我在python中编写代码并且遇到了疑问。似乎无关紧要,但无法克服它。问题是当我导入模块并按如下方式使用它时:

import math
print math.sqrt(9)

在这里,我将math(module)视为具有方法sqrt()的类。如果是这种情况,那么我怎样才能直接使用该类而不创建它的对象。我基本上无法理解类和对象之间的抽象。

4 个答案:

答案 0 :(得分:1)

模块更像是对象,而不是类。你没有"实例化"一个模块,每个模块只有一个实例,您可以使用import语句访问它。

具体来说,模块是'模块':

类型的对象
>>> import math
>>> type(math)
<type 'module'>

每个模块都将有一组不同的变量和方法。

只要首次导入模块,就会由Python实例化模块。已实例化的模块存储在sys.modules

>>> import sys
>>> 'math' in sys.modules
False
>>> import math
>>> 'math' in sys.modules
True
>>> sys.modules['math'] is math
True

答案 1 :(得分:1)

AFAIK所有python模块(如数学和数百万)在导入时都会被实例化。他们问了多少次你实例化?就一次!所有模块都是单身。

只是说上述说法不够充分,所以让我们深入研究它。 创建一个python模块(模块基本上是以&#34; .py&#34;扩展名结尾的任何文件)说&#34; p.py&#34;包含一些代码如下:

In p.py

print "Instantiating p.py module. Please wait..."
# your good pythonic optimized functions, classes goes here
print "Instantiating of p.py module is complete."

并在q.py中尝试导入

import p

当你运行q.py时,你会看到..

Instantiating p.py module. Please wait...
Instantiating of p.py module is complete.

现在你创建了它的实例吗?没有!但是你仍然准备好使用它。

答案 2 :(得分:0)

在您的情况下math不是一个类。当import math导入整个模块math时。你可以看到它像包含一个库(它的概念) 如果您想避免导入整个模块(为了不包含程序中的所有内容),您可以执行以下操作:

from math import sqrt
print sqrt(9)

这种方式只导入sqrt而不是math模块中的所有内容。

答案 3 :(得分:0)

  

在此,我将math(module)视为具有方法sqrt()的类。如果是这种情况,那么我怎样才能直接使用该类而不创建它的对象。我基本上无法理解类和对象之间的抽象。

导入模块时,会创建模块对象。就像使用open('file.txt')时一样,将创建一个文件对象。

您可以通过引用类名来使用类而不从中创建对象:

class A:
    value = 2 + 2 
A.value 

class A是类type的对象 - 用于创建类的内置类。 Python中的所有东西都是一个对象。

当您致电课程A()时,您将如何创建对象。 *有时候对象是由像import之类的语句创建模块对象创建的,def创建一个函数对象,class创建一个创建其他对象的类对象和许多其他语句......