zoukankan      html  css  js  c++  java
  • python中__init__.py与def __init__(self)的使用

    一直对__init__的使用很迷茫,这里系统的学习了解下

    1.__init__.py文件-package的标识

            python中每个package实际上是一个目录(Directory),程序运行时如何识别它为package呢?

           是的,__init__.py第一个作用就是package的标识,倘若没有该文件,则证明该目录不是一个package

    python中包和模块的两种导入方式:精确导入和模糊导入

      精确导入:

    from Pack.pack1 import Pack1Class
    
    import Pack.pack1.Pack1Class

      模糊导入:

    from Pack.pack1 import *

    2.定义package中的__all__,控制包的导入行为

    而模糊导入中的*中的模块是由__all__来定义的,__init__.py的第二个作用就是定义package中的__all__模块,用于模糊导入

    如:

    __init__.py 文件

    __all__ = ['os', 'sys', 're', 'urllib']

    pack1.py文件:

    from package1 import *

    把注册在__init__.py文件中__all__列表中的模块和包导入到当前文件中来。

    可以看到__init__.py可以控制包的导入行为,补充一下:想清楚的理解__init__.py的作用,还需了解import的引用机制:

     可以被import语句导入的对象是:

    • 模块文件(.py文件)
    • 共享库或DLL文件
    • 包(包含多个模块)
    • 内置模块(使用C编写并已链接到python解释器中)

    当导入模块时,解释器按照sys.path列表中的目录顺序来查找导入文件。

     3.而def __init__(self) ,def __init__(self,param多参数):

    常见的两种类的定义方式:

    class Example:
        def __init__(self):#两者之间的区别
            self.username= None
            self.password= None

    def __init__(self, username, pwd): self.username
    = name self.pwd= pwd

    区别很明显,前者在__init__方法中,只有一个self,指的是实例本身;但是后者在方法中,包含username,pwd属性,在定义方法是,就直接给定两个参数

    那么他们是如何实例化的呢?

    第二种带参数的很明显直接实例化,传入相应参数;

    example=Example("haha","123456")

    第一种则需要先实例化,然后针对属性进行赋值

    example=Example()
    example.username="haha"
    example.password="123456"

    思考下:__init__(self)与__init__(self,param多个参数)的区别在哪里呢??

        1.__init__(self,param所参数) 定义了这样一种类,他可以是一个空的结构,比如学生的表,当学生还没有进行考试时,他已经有了学生的姓名和成绩,当新的数据来的时候,可以直接添加进来。这个可以很方便的进行

        2.__init__(self) 则需要必须传值进来,不允许为空。对已有的数据导入很友好,在语句上减少了很多

  • 相关阅读:
    在Window上Vim包的选择
    如何在apache官网下载将将jar包
    hdu1870
    hdu1710(Binary Tree Traversals)
    poj 3252 Round Numbers 【推导·排列组合】
    3905
    Find them, Catch them
    Argus
    Team Queue
    Terrible Sets
  • 原文地址:https://www.cnblogs.com/dangkai/p/10754797.html
Copyright © 2011-2022 走看看