【问题标题】:How to fix ImportError: cannot import name 'testMethod' from 'Test'如何修复 ImportError:无法从“测试”导入名称“testMethod”
【发布时间】:2021-06-01 17:14:21
【问题描述】:

我写了一个简单的类“Test.py”。

class Test():   
    def testMethod():
        print('Test method is executed')

我想从命令提示符执行类的方法。

我正在使用以下命令

python -c "from Test import testMethod; testMethod()"

我收到以下错误

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: cannot import name 'testMethod' from 'Test'

你能帮我找出命令中的问题吗

【问题讨论】:

  • 您需要确保您的Test 类可以在命令行执行级别找到。围绕SO导入Python有很好的答案,比如this one
  • 但是,如果您的目标是在运行(而不是在导入之后)脚本时执行特定功能,则可以使用if __name__ == "__main__" 条件

标签: python-3.x cmd


【解决方案1】:

通过为您的 Python 文件提供类名,您可能会让自己在理解 Python 导入方面有些头疼。如果不将类 Test 引用到其原始文件,则无法导入它。 现在,为了能够导入类(然后是它的方法),您需要首先“告诉”Python 类所在的位置。对于我的示例,该文件名为foo.py,并放置在~/ 目录中

# foo.py

class Test():
    def test_method():
        print("Executed test method")

然后,您可以从同一个目录 (~/) 运行以下命令:

python -c "from foo import Test; Test.test_method()"

你的输出应该是:

>>> Executed test method

【讨论】:

  • 感谢@MatBBastos 的解决方案。是的,我现在能够获得所需的输出。由于我来自 Java 背景,我希望类和文件名应该匹配。您有什么好的参考资料可以详细解释两者之间的区别。
  • 我明白了。在 Python 中,您可以在一个文件中包含多个类,并且文件名不需要与其中任何一个匹配。通常,该文件被认为是一个“模块”,可以具有任意名称,其中可以有类(及其方法),甚至可以有没有类的函数。
  • 导入时,确保 Python 能够唯一标识当前环境中的元素(类、方法、函数、属性等)非常重要。 PEP 8 是 Python 中约定的主要参考。如果您在 Python 中寻找打包,我发现 this 是一个不错的入门参考。此外,在谈论 Python 时,通常可以查看官方文档。
猜你喜欢
  • 2021-12-08
  • 2019-12-30
  • 1970-01-01
  • 2019-11-27
  • 2015-02-05
  • 2019-12-19
  • 1970-01-01
  • 2017-10-17
相关资源
最近更新 更多