关于Python模块中__init__.py文件的一点胡言乱语 ╮(╯▽╰)╭

1. __ init __.py文件的作用

(1) 定义包

区分一个含有Python脚本的文件夹python包可以执行import package操作的文件夹)的标志就是看,这个文件夹下有没有__ini__.py文件,当一个文件夹下有这个文件,你可以进行导入相关操作,但是如果这个文件夹没有这个文件,那么python解释器是没有办法去执行import操作的,解释器看待你创建这个“包”就是一个文件夹。
那么怎么把文件夹当做包来导入呢?

…文件夹下创建一个__init__.py 文件啊! ╮(╯▽╰)╭


(2) 预导入

包下的__init__.py 文件定义了包的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在。

包的属性方法,什么意思呢?我们拿flask-login这个包来举例。
在这里插入图片描述

  1. 以下是flask-login包的__init__.py文件的全部内容,我们可以看到这个文件做了什么事情呢?有包的介绍,开发时间,更新版本,以及license等信息。
  2. 除此还有预先导入的包下的其他的模块,因为在init文件中预先导入了这些模块,你在安装了flask-login包之后,才能使用如from flask-login import login_manager这样的语句,亦或是import flask-login,然后在代码中使用flask-login.login_manager去调用相关模块。
  3. 如果__ini__.py为空,你用import flask-login啥都做不了,如果这时候再用包.模块名的方式调用,就会报AttributeError: 'module' object has no attribute 'Module1'. (^_−)☆
# -*- coding: utf-8 -*-
'''
    flask_login
    -----------
    This module provides user session management for Flask. It lets you log
    your users in and out in a database-independent manner.
    :copyright: (c) 2011 by Matthew Frazier.
    :license: MIT/X11, see LICENSE for more details.
'''

from .__about__ import __version__
from .config import (COOKIE_NAME, COOKIE_DURATION, COOKIE_SECURE,
                     COOKIE_HTTPONLY, LOGIN_MESSAGE, LOGIN_MESSAGE_CATEGORY,
                     REFRESH_MESSAGE, REFRESH_MESSAGE_CATEGORY, ID_ATTRIBUTE,
                     AUTH_HEADER_NAME)
from .login_manager import LoginManager
from .mixins import UserMixin, AnonymousUserMixin
from .signals import (user_logged_in, user_logged_out, user_loaded_from_cookie,
                      user_loaded_from_header, user_loaded_from_request,
                      user_login_confirmed, user_unauthorized,
                      user_needs_refresh, user_accessed, session_protected)
from .test_client import FlaskLoginClient
from .utils import (current_user, login_url, login_fresh, login_user,
                    logout_user, confirm_login, login_required,
                    fresh_login_required, set_login_view, encode_cookie,
                    decode_cookie, make_next_param)


__all__ = [
    LoginManager.__name__,
    FlaskLoginClient.__name__,
    UserMixin.__name__,
    AnonymousUserMixin.__name__,
    __version__,
    'COOKIE_NAME',
    'COOKIE_DURATION',
    'COOKIE_SECURE',
    'COOKIE_HTTPONLY',
    'LOGIN_MESSAGE',
    'LOGIN_MESSAGE_CATEGORY',
    'REFRESH_MESSAGE',
    'REFRESH_MESSAGE_CATEGORY',
    'ID_ATTRIBUTE',
    'AUTH_HEADER_NAME',
    'user_logged_in',
    'user_logged_out',
    'user_loaded_from_cookie',
    'user_loaded_from_header',
    'user_loaded_from_request',
    'user_login_confirmed',
    'user_unauthorized',
    'user_needs_refresh',
    'user_accessed',
    'session_protected',
    'current_user',
    'login_url',
    'login_fresh',
    'login_user',
    'logout_user',
    'confirm_login',
    'login_required',
    'fresh_login_required',
    'set_login_view',
    'encode_cookie',
    'decode_cookie',
    'make_next_param',
]

  1. 是不是奇怪这个__all__列表是干嘛的,为嘛没解释,没写漏。( ̄へ ̄) 你在写代码的时候有没有用过fom flask-login import *这种懒人写法?现在懂了吗,这个 imprt * 全部导入的就是这个__all__列表中的内容~~~

列表__all__,可以控制*所表示要引入的东西(模块,函数,类等)


(3) 配置模块的初始化操作

其实__init__.py 文件和其他py文件一样,是可以写代码的,除了预定义和预导入等初始化操作,如果包还有其他初始化操作,你可以吧代码写在这里,python解释器在加载包的时候,会首先执行__init__.py文件,比如你写的爬虫包的预加载、预定义的等代码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值