Python模块包中__init__.py文件的作用

18人阅读 评论(0) 收藏 举报
分类:

在新建python包的时候,它默认生成了一个 __init__.py 的空文件。


打开一看结果是空的,便觉得没有什么用,就把它删掉了。

但是那个python包结果变成了Python文件夹了。

这是怎么回事呢!

原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。当你将一个包作为模块导入(比如从 xml 导入 dom )的时候,实际上导入了它的 __init__.py 文件。一个包是一个带有特殊文件 __init__.py 的目录。__init__.py 文件定义了包的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在。如果 __init__.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。

__init__.py文件

这下面是我复制 io.py 里面的内容

"""该Py文件的简单介绍
The io module provides the Python interfaces to stream handling. The
builtin open function is defined in this module.

At the top of the I/O hierarchy is the abstract base class IOBase. It
defines the basic interface to a stream. Note, however, that there is no
separation between reading and writing to streams; implementations are
allowed to raise an OSError if they do not support a given operation.

Extending IOBase is RawIOBase which deals simply with the reading and
writing of raw bytes to a stream. FileIO subclasses RawIOBase to provide
an interface to OS files.

BufferedIOBase deals with buffering on a raw byte stream (RawIOBase). Its
subclasses, BufferedWriter, BufferedReader, and BufferedRWPair buffer
streams that are readable, writable, and both respectively.
BufferedRandom provides a buffered interface to random access
streams. BytesIO is a simple stream of in-memory bytes.

Another IOBase subclass, TextIOBase, deals with the encoding and decoding
of streams into text. TextIOWrapper, which extends it, is a buffered text
interface to a buffered raw stream (`BufferedIOBase`). Finally, StringIO
is an in-memory stream for text.

Argument names are not part of the specification, and only the arguments
of open() are intended to be used as keyword arguments.

data:

DEFAULT_BUFFER_SIZE

   An int containing the default buffer size used by the module's buffered
   I/O classes. open() uses the file's blksize (as obtained by os.stat) if
   possible.
"""
# New I/O library conforming to PEP 3116.
#作者信息modul

__author__ = ("Guido van Rossum <guido@python.org>, "
              "Mike Verdone <mike.verdone@gmail.com>, "
              "Mark Russell <mark.russell@zen.co.uk>, "
              "Antoine Pitrou <solipsis@pitrou.net>, "
              "Amaury Forgeot d'Arc <amauryfa@gmail.com>, "
              "Benjamin Peterson <benjamin@python.org>")
#导入所有的模块

__all__ = ["BlockingIOError", "open", "IOBase", "RawIOBase", "FileIO",
           "BytesIO", "StringIO", "BufferedIOBase",
           "BufferedReader", "BufferedWriter", "BufferedRWPair",
           "BufferedRandom", "TextIOBase", "TextIOWrapper",
           "UnsupportedOperation", "SEEK_SET", "SEEK_CUR", "SEEK_END"]

#模块
import _io
import abc
#以下的事具体的配置过程,不详

from _io import (DEFAULT_BUFFER_SIZE, BlockingIOError, UnsupportedOperation,
                 open, FileIO, BytesIO, StringIO, BufferedReader,
                 BufferedWriter, BufferedRWPair, BufferedRandom,
                 IncrementalNewlineDecoder, TextIOWrapper)

OpenWrapper = _io.open # for compatibility with _pyio

# Pretend this exception was created here.
UnsupportedOperation.__module__ = "io"

# for seek()
SEEK_SET = 0
SEEK_CUR = 1
SEEK_END = 2

# Declaring ABCs in C is tricky so we do it here.
# Method descriptions and default implementations are inherited from the C
# version however.
class IOBase(_io._IOBase, metaclass=abc.ABCMeta):
    __doc__ = _io._IOBase.__doc__

class RawIOBase(_io._RawIOBase, IOBase):
    __doc__ = _io._RawIOBase.__doc__

class BufferedIOBase(_io._BufferedIOBase, IOBase):
    __doc__ = _io._BufferedIOBase.__doc__

class TextIOBase(_io._TextIOBase, IOBase):
    __doc__ = _io._TextIOBase.__doc__

RawIOBase.register(FileIO)

for klass in (BytesIO, BufferedReader, BufferedWriter, BufferedRandom,
              BufferedRWPair):
    BufferedIOBase.register(klass)

for klass in (StringIO, TextIOWrapper):
    TextIOBase.register(klass)
del klass

try:
    from _io import _WindowsConsoleIO
except ImportError:
    pass
else:
    RawIOBase.register(_WindowsConsoleIO)

















































这下面是我复制 io.py 里面的内容

__all__from  io import *  #导入所有的模块

查看评论

python学习(2):自定义包结构及__init__.py模块和__all__变量的使用

使用python经常会导入外部包,所以自己写一个深层包结构,然后自己调用,会理解的比较深刻 首先创建如下图所示的包结构:共有3层文件夹,最里面的一层文件夹下面包含4个有关加减乘除的模块,分别提供了+-...
  • qq_32166627
  • qq_32166627
  • 2017-03-02 11:50:47
  • 2812

Package内的__main__.py和__init__.py

假设一个最简单的Package如下: ├──pkg │ ├── __init__.py │ ├── __main__.py 如果你希望 python 将一个文件夹作为 Package ...
  • ywcpig
  • ywcpig
  • 2016-04-18 18:52:01
  • 826

Python模块包中__init__.py文件 精髓

原文:http://www.douban.com/group/topic/24075924/                  本人有删改  参考  http://www.cnblogs.com...
  • huochuangchuang
  • huochuangchuang
  • 2015-10-23 21:31:35
  • 2030

【python】引用模块,以及初探__init__.py

怎么引用模块 环境:win7 + python3.5.2 文档结构:-project  -data  -src   -filterCorpus.py   -translateMonolin...
  • mengmengz07
  • mengmengz07
  • 2017-04-19 11:21:48
  • 5494

Python中的__init__.py与模块导入

python中的Module是比较重要的概念。常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写...
  • dutsoft
  • dutsoft
  • 2014-10-26 22:23:55
  • 5110

python文件夹中__init__.py的用处

看到很多人写的python项目中,在一个特定文件夹下面经常放一个__init__.py文件,刚开始很诧异,然后就百度看了一下其他人的理解,然后归纳如下: 1,__init__.py的作用是把一个文件...
  • xuqiaobo
  • xuqiaobo
  • 2017-06-27 10:21:03
  • 1736

为什么python设计时要有__init__.py才视为包

this is done to prevent directories with a common name, such as string, from unintentionally hiding ...
  • lmw21848
  • lmw21848
  • 2017-12-13 20:20:53
  • 183

Python中__init__.py文件的作用

在创建python包的过程中,IDE都会在包根目录下创建一个__init__.py文件,该Python文件默认是空的.目录结构如下: Pycharm下的package树结构: 在Finder中...
  • monkey_D_feilong
  • monkey_D_feilong
  • 2016-08-08 11:18:23
  • 3568

python __init__.py文件的作用

python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module。 那么,__init__.py还有什么别的功能呢? 其实,__init__.p...
  • gui694278452
  • gui694278452
  • 2015-08-20 16:42:28
  • 820

__init__.py空文件是什么?

__init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件。 通常__init__.py 文件为空,但是我们还可以为它...
  • JOJOY_tester
  • JOJOY_tester
  • 2017-01-04 11:17:44
  • 972
    个人资料
    等级:
    访问量: 81
    积分: 42
    排名: 264万+
    文章存档