这是我参与更文挑战的第 22 天,活动详情查看: 更文挑战
概述
类是对象的模板,是抽象的。
构造函数__init__是Python魔术方法之一,如图魔术方法
我们通过类模版去创建类的实例对象,然后再调用类定义的功能。
那实例对象的属性是通过什么来初始化的?
这时候Python引入来构造函数__init__
构造函数,会在创建实例对象之后Python会自动执行此方法,把初始化的属性特点放到实例对象里。
1. 构造函数介绍
通过前面的学习,我们知道一个python对象包含三个部分:id(识别码),type(对象类型),value(对象的值)
那么我们进一步深入对象包含的三部分:
-
id(identity识别码),对象在堆内存的存储地址
-
type(对象类型),Python六大数据类型
-
value(对象的值)
(1) 属性(attribute)
(2) 方法(method)
我们通过类创建实例对象后,需要定义构造函数__init__()方法。
构造方法用于执行实例对象的初始化工作,即对象创建之后,初始化当前对象的相关的属性,无返回值
构造函数重点:
- 名称固定,必须为__init__()
- 第一个参数固定,必须是:self。self指的是就是刚刚创建好的实例对象。
- 构造函数通常用来初始化实例对象的实例属性
- 通过类名(参数列表)来调用构造函数,调用后,将创建好的对象返回给相应的变量
- 构造函数__init__()方法:初始化创建好的对象,初始化指的是给实例属性赋值值
- 创建实例__new__()方法:用于创建对象,但一般都无需重新定义该方法
2. 构造函数底层机制
我们通过栗子来学习构造函数的过程
class Animal:
def __init__(self,name,food): # Animal的属性特征
self.name = name
self.food = food
cat = Animal("Tom","fish")
复制代码
构造函数初始化实例对象过程如下:
1.Animal类会通过默认的__new__()方法为实例对象在堆内存中为开辟一个空间
- 实例对象创建好后,Python会自动调用__init__()方法为对象数据成员开辟内存空间
3. 完成对象数据成员的初始化,每个属性值赋值相应的实例属性变量
敲黑板,重点来啦~
- Python中的self相当于C++中的self指针,Java 和C#中的this关键字。
- Python中 self必须为构造函数的第一个参数,名字可以任意更改,但是一般遵守惯例,都叫做self
- 构造函数只能被调用一次,也就是在new创建完对象之后执行
3. 构造函数实操
class Animal:
def __init__(self,name,food): # Animal的属性特征
self.name = name
self.food = food
def info(self): # Animal行为
print(self.name,'的最喜欢的食物是',self.food)
#创建猫实例
cat = Animal("Tom","fish")
cat.info()
#创建狗实例
dog = Animal("Bob","meat")
dog.info()
复制代码
拓展:
-
关于子类继承父类,如果子类的__init__()函数没有被重写,则会沿着搜索树找到父类的构造方法去执行父类的构造函数
-
子类重写了构造函数,则创建实例对象之后,会执行自己的构造函数方法,父类的构造函数不执行
-
子类重写了构造函数,构造函数可以显式调用父类的构造函数形式如:
父类.__init__(self) 复制代码
总结
我们今天学习了构造函数__init__(),其在创建对象之后被Python自动调用初始化实例对象属性数据值,无返回值,并且构造函数不能被显示调用。
创建对象时,如果需要,构造函数可以接受参数。当创建没有构造函数的类时,Python会自动创建一个不执行任何操作的默认构造函数。
每个类必须有一个构造函数,即使它只依赖于默认构造函数
好啦,以上是本期内容,欢迎大佬评论区指正~