2014-01-21 36 views
0

我使用它定义了一个类,如下所示一个模块:为什么我必须声明模块名称来创建对象?

class PyTimeCode(object): 
    <methods, etc.> 

在python解释,我执行以下操作:

import pytimecode 

mytc = PyTimeCode(6) 

上述不工作(产生NameError)。

以下工作:

import pytimecode 

mytc = pytimecode.PyTimeCode(6) 

为什么?

回答

3

这是import声明的工作原理。从documentation

第一种形式的导入语句将本地名称空间中的模块名称绑定到模块对象,然后继续导入下一个标识符(如果有)。如果模块名称后面跟着as,则下面的名称将用作模块的本地名称。

如果你想使用模块的内容,而无需前缀使用from形式:

的从形式不绑定的模块名称:它通过标识符的列表,看起来他们每个人最多在步骤(1)中发现的模块,并在结合在本地名称空间中的对象有关的代码的名称这样找到

一个例子:

from pytimecode import PyTimeCode 

mytc = PyTimeCode(6) 
(不推荐一般)

或:

from pytimecode import * 

mytc = PyTimeCode(6) 
+0

+1太感谢了,会接受,只要SO让我。一个后续问题:出于某种原因,当我执行'pip freeze'时,此模块显示名为'pytimecode.py',而其他模块名称不显示'.py'扩展名。这很重要吗?它会对任何事情产生影响吗?谢谢。 – Sabuncu

+1

@Sabuncu对不起,不知道。但也许只是提出另一个问题,可能有人知道'点子'会帮助你。 – BartoszKP

+0

好的,再次感谢。 – Sabuncu

相关问题