gpt4 book ai didi

Python:随脚本交付的自定义包及其导入方式

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:48 24 4
gpt4 key购买 nike

我正在尝试理解包在 Python 中的工作方式。我的目标是只要求安装 Python,用户应该能够简单地 check out 脚本存储库并运行它。

相关文件(ls TestPackage.py Mypackage/的输出):

TestPackage.py

Mypackage/:
__init__.py
SomeClass.py

TestPackage.py 的内容:

from Mypackage import SomeClass

print "Hello from TestPackage.py"

the_instance = SomeClass()

the_instance.hi()

Mypackage/_init_.py 的内容:

class InsideInitPy():
def hi(self):
print "Hi from InsideInitPy! (when importing package)"

InsideInitPy().hi()

Mypackage/SomeClass.py 的内容:

class SomeClass():
def hi(self):
print "Hi from SomeClass in the package! (using explicit call)"

运行测试脚本python TestPackage.py时:

Hi from InsideInitPy! (when importing package)
Hello from TestPackage.py
Traceback (most recent call last):
File "TestPackage.py", line 5, in <module>
the_instance = SomeClass()
TypeError: 'module' object is not callable

产生错误的行是 the_instance = SomeClass()。作为 来自 InsideInitPy 的嗨! (导入包时) 导入时写入控制台似乎可以找到包。

如何使用 TestPackage.py 中第一行的这些变体来使示例工作(以及优缺点):

  1. 从 Mypackage 导入 SomeClass
  2. 从 Mypackage 导入 *
  3. 导入我的包

用户是否站在与TestPackage.py相同的目录下是否影响导入?

最佳答案

不要混淆类和模块。

你有一个文件SomeClass.py。文件对应于模块。因此,import SomeClass 为您提供了一个模块

SomeClass.py 中,您有一个类定义。该类是 SomeClass.SomeClass。所以你需要写

the_instance = SomeClass.SomeClass()

或者,您可以从模块 MyPackage.SomeClass 导入类 SomeClass:

from MyPackage.Someclass import SomeClass

关于Python:随脚本交付的自定义包及其导入方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com