将一个py文件中的类导入另一个py文件中_如何优雅的创建__init__.py文件?

df2522fa2c3b6237ad75841f2a913220.gif点击关注我哦 df2522fa2c3b6237ad75841f2a913220.gif 5f13866708693cce8f2564411e729f54.png

一篇文章带你了解如何优雅的创建__init__.py文件

什么是 Python 包?

《数据科学家的模块化编程指南》文章中,我们介绍了:Python 包只是一个有组织的 Python 模块集合,而 Python 模块只是一个单独的 Python 文件。

为什么我要使用__init__.py?

使用 _init _. py 创建一个软件包就是为了让开发更大的 Python 项目变得更容易。它提供了一种机制,可以将单独的 python 脚本分组到单个可导入模块中。

让我们来看一些例子

理解为什么要使用__init__.py并且学习如何使用它来创建一个包的最好方法是通过一些快速的例子运行!最好的学习方法就是实践!

本教程中的代码应该适用于 Python 3。

假设我们创建了三个模块:

someFolder|-- stringLength.py|-- stringToUpper.py`-- stringToLower.py

记住,模块只是任何单个 python 文件的另一个名称

对于我们的例子,这些文件的内容如下:

# stringLength.pydef stringLength(inStr): return len(inStr)

# stringToUpper.pydef stringToUpper(inStr): return inStr.upper()

# stringToLower.pydef stringToLower(inStr): return inStr.lower()

显然,这些函数是无用的,但是作为一个基本概念的模型是有帮助的,我们已经编写了一些以某种方式相关的 python 模块。

那么,如果不创建一个包并使用 _init _. py,我们如何使用这些文件中的函数呢?

我们只能导入这些文件,如果它们位于我们正在运行的脚本所在的工作目录中。

我们可以在一个新的 Python 脚本中使用这些文件,但有一个关键的警告:

The files must be in the same directory as the script we are trying to use them in. 

为了说明这一点,让我们创建一个名为 example1.py 的文件,它利用了我们的模块:

# example1.pyimport stringLengthimport stringToLowerimport stringToUppersome_string = "Hello, Universe!"print(stringLength.stringLength(some_string))print(stringToLower.stringToLower(some_string))print(stringToUpper.stringToUpper(some_string))

添加一个空白__init__.py

如果我们想要将这些脚本分离到一个文件夹中,以使它们更有组织性,那会怎么样呢?

这就是 __init__. py文件发挥作用的地方。

首先,让我们将脚本移动到一个新的子文件夹中,并将其命名为 string _func。然后在该文件夹中创建一个名为__init__.py 的空文件。

下面是我们新的文件/文件夹结构:

someFolder|-- string_func| |-- __init__.py| |-- stringToUpper.py| |-- stringToLower.py| `-- strengthLength.py`-- example1.py

所以,现在让我们测试一下__init__. py到底允许我们做什么:

让我们创建一个新的 example2.py 文件。

# example2.pyimport string_func.stringLengthimport string_func.stringToLowerimport string_func.stringToUppersome_string = "Hello, Universe!"print(string_func.stringLength.stringLength(some_string))print(string_func.stringToLower.stringToLower(some_string))print(string_func.stringToUpper.stringToUpper(some_string))

现在,我们可以以这种方式访问字符串函数。这很好,因为它们都在一个独立的文件夹中,但语法肯定不是很简洁。让我们看看我们是否可以通过编辑 __init__. py来改善一下。

将import 加入到__init__.py中

打开你的__init__.py文件并做以下更改:

# __init__.pyfrom .stringLength import stringLengthfrom .stringToLower import stringToLowerfrom .stringToUpper import stringToUpper

因此,在我们的__init__.py中,我们现在可以将代码缩短为:

# example3.pyimport string_funcsome_string = "Hello, Universe!"print(string_func.stringLength(some_string))print(string_func.stringToLower(some_string))print(string_func.stringToUpper(some_string))

现在语法变得更简洁了,你可以看到 string _ func 调用函数就像它使用自己的模块一样。

所以,这基本上就是__init__.py的功劳!它允许您将目录当作 python 模块来处理。然后可以在__init__.py文件中进一步定义和导入,或者也可以将该文件保留为空白。

调试import问题

对于调试import的问题,一般有三个基本的技巧:

    1. 使用交互式解释器(REPL)导入模块,并查看是否得到了所期望的结果;

    2. 使用 python -v -m my _ scriptname.py 启动脚本,然后检查输出,确切查看从哪里导入模块;

    3. 使用 Pycharm。Pycharm 神奇的内省能力意味着您将立即知道您的模块是否被正确导入,因为如果没有导入,它将表明一个错误。它有时也会建议进行适当的修正。社区版是免费的,如果你是一个学生,你可以免费订阅他们的所有产品!

·  END  ·

HAPPY LIFE

70253b048967d3a09f6fa031abb8b3b3.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值