python - 从 python 中的另一个文件导入类 - 我知道修复方法,但为什么原始文件不起作用?

标签 python file class import

我可以让这段代码正常工作,但我仍然很困惑为什么它在我尝试的第一种方法中不起作用。

我正在练习 python,因为我的论文将在其中进行编码(使用 Arduino 和 PC 接口(interface)做一些很酷的事情)。我正在尝试将另一个文件中的类导入到我的主程序中,以便我可以创建对象。这两个文件都在同一个目录中。如果您此时查看代码,可能会更容易。

#from ArduinoBot import *
#from ArduinoBot import ArduinoBot
import ArduinoBot

# Create ArduinoBot object
bot1 = ArduinoBot()

# Call toString inside bot1 object
bot1.toString()

input("Press enter to end.")

这是最基本的 ArduinoBot 类

class ArduinoBot:

def toString(self):
    print ("ArduinoBot toString")

前两个注释掉的 import 语句中的任何一个都可以使这项工作正常进行,但最后一个不行,对我来说这似乎是最直观和最通用的。这里没有太多的代码会出错,当我听说过 Python 的一些好东西时,遇到这些挑剔的语言特定的怪癖有点令人沮丧。不管怎样,我一定是做错了什么,但为什么简单的“导入类名”或“导入文件名”不起作用?

感谢您的帮助。

最佳答案

考虑一个文件(example.py):

class foo(object):
    pass

class bar(object):
    pass

class example(object):
    pass

现在在你的主程序中,如果你这样做:

import example

应该从文件 example.py 导入什么?只是类 example 吗? foo 类也应该出现吗?如果 import module 将整个模块的命名空间直接拉到您当前的命名空间中,其含义就太模糊了。

这个想法是命名空间很棒。他们让您知道类/函数/数据的来源。它们还可以让您将相关的事物组合在一起(或者等效地,它们可以帮助您将不相关的事物分开!)。一个模块设置了一个命名空间,然后您通过使用 import 的方式告诉 python 您希望如何将该命名空间带入当前上下文(命名空间)。

from ... import * 表示 -- 将该模块中的所有内容直接引入我的命名空间。

from ... import ... as ... 说,只将我指定的东西直接带入我的命名空间,但在这里给它一个新名称。

最后,import ... 只是说将该模块引入当前命名空间,但将其分开。由于(至少)两个原因,这是生产代码中最常见的形式。

  • 它可以防止名称冲突。你可以有一个名为 foo 的本地类,它不会与 example.py 中的 foo 冲突——你可以通过 example.foo
  • 它可以很容易地跟踪一个类来自哪个模块以进行调试。

考虑:

from foo import *
from bar import *
a = AClass() #did this come from foo?  bar? ... Hmmm...

在这种情况下,要从 example.py 访问类 example,您还可以:

import example
example_instance = example.example()

但你也可以获得foo:

foo_instance = example.foo()

关于python - 从 python 中的另一个文件导入类 - 我知道修复方法,但为什么原始文件不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14179290/

相关文章:

python - 根据 2 个条件替换 Df 中的值

linux - 打开文件时在 linux 中会发生什么?

python - 封装导入模块的范围

javascript - Javascript onClick 可以与类一起使用吗

Python 子进程超时终止

python - python post server是否有更好的方法来处理不同的文件类型?

android - Flutter 在下载文件夹中创建文件

java - 如何选择需要将字符串写入文件的主要 Java IO 类?

c++ - 类 header.h 不包含在 main 中

python - 使用 matplotlib Python 绘制参数图