如何在模块/包中公开对象?

时间:2016-12-11 12:24:54

标签: python python-module pythonista

我应该如何实现我的包,以便我可以编写以下内容。

假设我的模块名为Market。它是我的python脚本的工作目录中名为goShopping.py

的文件夹

在我的goShopping.py中,我希望能够编写以下代码:

audit_table.c.audited_at != None

香蕉和苹果是我模块中某些文件中的对象。

模块市场应该如何编写?

假设我在Module文件夹中有一个名为fruits.py的文件,我定义了Banana和Apple类。 我知道我可以编写如下代码:

import market as mk 

B = mk.Banana(0.99)
A = mk.Apple(1.10)
A.buy()
B.buy()

但我不想那样。

作为一种解决方案,我考虑在import market.fruits as mk B = mk.Banana(0.99) A = mk.Apple(1.10) A.buy() B.buy() (市场文件夹中的__init__.py)中进行一些声明,如下所示:

__init.py

但是我收到以下错误:

from fruits import Apple,Banana.

来自行:

AttributeError: module 'market' has no attribute 'Banana'

我应该如何构造以及我应该写什么才能能够按我想要的方式公开对象?

我正在使用Pythonista for iOS。我想知道这是不是问题。

2 个答案:

答案 0 :(得分:0)

可能没有导入模块/脚本。这不会导致错误消息。尝试导入一个名为“xyz”的模块,你会看到只要你不尝试访问它就不会出错。

最可能的原因是模块与脚本不在同一文件夹中,或者不在包含__init__.py脚本的子目录中。

您的脚本应该能够导入与自身相同的文件夹中的任何模块。您还可以从包中导入模块。包是一个包含一个或多个python模块的文件夹和一个名为__init__.py的特殊模块,它将文件夹标记为包。包文件夹需要在PYTHONPATH中,或者是当前工作目录的子目录,因此Python可以找到它,但子包文件夹不能找到它。

检查this article,它可以很好地解释这是如何工作的。

答案 1 :(得分:0)

在文件夹中的from FolderName.fruits import Apple,Banana中添加__init__.py对我有用:然后我可以从主项目from FolderName import Apple,Banana调用

在文件夹中的from fruits import Apple,Banana中添加__init__.py对我不起作用