__init__.py文件和__init__(self)函数的作用

让先看一下代码包结构:
__init__.py文件和__init__(self)函数的作用_第1张图片
在TestCase下面有init.py,animal.py,case.py三个文件。
我们在python面向对象编程中可以经常看到def __ init __(self):
这是一个初始化函数,当你实例化一个类对象时,python会对该对象进行初始化。
举个例子:这是animal.py模块的代码,里面有Dog和Cat两个类。每个类中有init()函数。

class Dog(object):
    def __init__(self, name, colour):
        self._name = name
        self._colour = colour

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, name):
        self._name = name

    @property
    def colour(self):
        return self._colour

    @colour.setter
    def colour(self, colour):
        self._name = colour


class Cat(object):
    def __init__(self, name, colour):
        self._name = name
        self._colour = colour

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, name):
        self._name = name

    @property
    def colour(self):
        return self._colour

    @colour.setter
    def colour(self, colour):
        self._name = colour
		

让我们在case.py里面实例一个Dog对象,我们先从TestCase中导入所有模块。

from TestCase import *
dog = Dog('狗子', 'red')
print(dog.name)
print(dog.colour)
print(dog)
D:\work\Scripts\python.exe D:/Test.bak/TestCase/case.py
狗子
red
<TestCase.animal.Dog object at 0x0000014F647C77C0>

Process finished with exit code 0

dog对象创建成功,init()函数的作用是在你创建对象的时候给对象附加目标属性。
那我现在想创建一个Cat对象,于是,在case.py中追加代码。
__init__.py文件和__init__(self)函数的作用_第2张图片
为什么没有Cat类?,明明已经导入了animal的所有类。这个时候就是__init__.py产生作用了。让我们看一下它的内容。
在这里插入图片描述
发现这里从animal模块中只导入了Dog类,所以Cat无法被创建。也就是说我们所导入的模块被__init__.py给初始化了,按照你的意愿进行了筛选。而.animal的小数点表示__init__.py的路径下。这是第一个作用!

假如,我们把__init__.py删除,我们会发现,不仅猫无法实例化,狗也无法实例化了。只能将导入模块的方式进行修改才能恢复正常。
__init__.py文件和__init__(self)函数的作用_第3张图片

__init__.py文件和__init__(self)函数的作用_第4张图片
说明有了__init__.py的包可以被视为模块来导入!这是第二个作用。

你可能感兴趣的:(python,__init__,init)