【问题标题】:Importing class from another file - where to put 'import' statements that the class requires从另一个文件导入类 - 将类需要的“导入”语句放在哪里
【发布时间】:2014-10-05 10:16:39
【问题描述】:

我有两个 Python 文件,一个名为 main.py,一个名为 second.pysecond.py 中存在一个使用几个模块的类。

我是否能够从main.py 中运行的代码实例化该类,从而允许我在main.py 中导入模块?或者我是否必须将模块导入second.py,该类所在的位置?

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

【问题讨论】:

  • 你应该import类需要的模块在哪里定义类,即在second.py。如果main.py 中的其他类/函数需要这些模块,import 他们也在那里。
  • @jonrsharpe 所以 main.py 中的类对象仍然使用在 second.py 中导入的模块?

标签: python class python-import


【解决方案1】:

这是一个简单的反例:如果您依赖 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 中定义的类和函数使用该文件中定义的范围 - 它们需要工作的任何imports 必须在file.py 中创建。否则,您将依赖导入 file.py 的模块来导入 file.py 需要工作的任何其他内容,这太荒谬了。

【讨论】:

  • 但是你的反例不是简单地调用位于 second.py 中的函数吗?我的困惑在于实例化类的概念。如果对象是在 main.py 中创建的,它会将命名空间更改为 main.py 的命名空间还是保留在 second.py 中?如果这有任何意义:-/
  • “简单地调用函数” - 而不是什么?为什么类和函数的行为应该不同?我已经切换到一个类示例,它(惊喜!)做的事情完全一样。
  • 不要将我的问题或陈述误解为批评,我试图理解其中的区别。我认为调用一个函数会在 second.py 中使用任何传递的参数执行该函数,并且实例化一个类会将实例带到 main.py 但我想我只需要在理解类实例使用 second.py 的情况下运行导入的模块(如您的示例所证明的那样),无论它在哪里实例化。干杯。
猜你喜欢
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 2021-01-22
相关资源
最近更新 更多