2014-10-05 62 views
0

我有两个Python文件,一个名为main.py,另一个名为second.py。在second.py中存在一个类,它使用了几个模块。从另一个文件导入类 - 在哪里放置类需要的“导入”语句

我可以从运行在main.py中的代码实例化类,因此允许我导入main.py中的模块吗?或者我必须真正拥有导入second.py的模块,其中存在类?

我问这是因为我认为这是合乎逻辑的,如果您将一个类实例化为代码为main.py的对象,那么此类对象中的函数应该能够使用在开始时导入的模块main.py。那么,通常情况下,import module陈述会在哪里? main.pysecond.py.

+0

您应该'导入​​'该类需要的模块*类定义*,即在'second.py'中。如果'main.py'中的其他类/函数也需要这些模块,那么也需要将它们导入。 – jonrsharpe 2014-10-05 10:21:31

+0

@jonrsharpe 因此,main.py中的类对象仍然使用在second.py中导入的模块? – Sighonide 2014-10-05 10:24:03

回答

0

下面是一个简单的反例:如果你在second.py依靠一个模块上,在main.py时才导入?

main.py

import time 

import second 

timer = second.Timer() 

print timer.timestamp() 

second.py

class Timer(object): 

    def timestamp(self): 
     return time.strftime("%H:%M:%S") 

结果

Traceback (most recent call last): 
    File "/Users/jonrsharpe/Documents/main.py", line 7, in <module> 
    print timer.timestamp() 
    File "/Users/jonrsharpe/Documents/second.py", line 4, in timestamp 
    return time.strftime("%H:%M:%S") 
NameError: global name 'time' is not defined 

file.py中定义的类和函数使用该文件中定义的范围 - 它们需要工作的任何import必须在file.py中进行。否则,您将依赖导入file.py的模块来导入任何其他file.py需要工作,这将是荒谬的。

+0

但是,不是你的反例只是调用位于second.py的函数吗?我的困惑在于实例化类的概念。如果该对象是在main.py中创建的,它是否将名称空间更改为main.py的名称空间,还是保留在second.py中?如果这是有道理的: -/ – Sighonide 2014-10-05 10:39:36

+0

*“简单地调用函数”* - 而不是什么?为什么类和函数的行为不同?我已经转向了一个类的例子,这(惊喜!)完全一样的东西。 – jonrsharpe 2014-10-05 10:44:28

+0

不要将我的问题或陈述误解为批评,我试图理解差异。我认为调用一个函数会使用second.py中的任何传递参数执行该函数,并实例化一个类会将实例带到main.py,但我想我只需要理解该类实例使用second.py就可以运行导入的模块(如您的示例所证明的),无论它在哪里实例化。干杯。 – Sighonide 2014-10-05 11:14:23