在 Python 中,构造函数(Constructor)是一种特殊的方法,当创建类的新实例时,它会自动被调用。构造函数的主要作用是初始化新创建对象的属性,设置对象的初始状态。
为什么要使用构造函数?
在介绍构造函数之前,我们先来看一个例子。
# 定义类
class Hero():
name = '船长'
type = '力量型'
def skill(self):
print('放大招啦!')
# 实例化第 1 个对象
h1 = Hero()
print(f'name: {h1.name}, type: {h1.type}')
# 实例化第 2 个对象
h2 = Hero()
print(f'name: {h2.name}, type: {h2.type}')运行结果如下。
name: 船长 , type: 力量型
name: 船长 , type: 力量型分析:
在这个例子中,我们使用 Hero 类实例化出两个对象:h1、h2。从运行结果可以看出,h1、h2 这两个对象的 name 属性和 type 属性取值都是一样的。
但是在实际开发中,每一个英雄的名字和类型都是不一样的,又该怎么去实现呢?此时就要使用到构造函数了。
如何使用构造函数?
在 Python 中,我们可以使用 “__init__()” 这个构造函数来为每一个对象定义独特的属性值。
语法:
class 类名 ():
def __init__(self, A, B, C):
self.A = A
self.B = B
self.C = C
def 方法名 (self):
……说明:
__init__() 就是我们所说的构造函数。这个函数跟普通函数是一样的,只不过它是在类的内部定义,并且这个函数名是固定的。
__init__() 的意思是初始化,是 “initialization” 的简写。这个方法的书写方式是:先输入两个下划线(注意是两个,而不是一个),然后输入 init,最后再输入两个下划线。
__init__() 的第 1 个参数必须是 self,这个跟类的方法定义是一样的。然后在构造函数内部,我们都是使用 “self.xxx” 这种方式来接收参数,self 指向的就是当前的对象。
构造函数的作用在于:接收不同的参数,让你的类具备 “模板” 功能,然后可以生成不同的对象。这个跟普通函数传入不同的参数有点类似。
示例:__init__() 基本用法
# 定义类
class Hero():
def __init__(self, name, type):
self.name = name
self.type = type
def skill(self):
print('开始放大招啦!')
# 实例化第 1 个对象
h1 = Hero('船长', '力量型')
print(f'name: {h1.name}, type: {h1.type}')
# 实例化第 2 个对象
h2 = Hero('先知', '智力型')
print(f'name: {h2.name}, type: {h2.type}')运行结果如下。
name: 船长 , type: 力量型
name: 先知 , type: 智力型分析:
在这个例子中,我们使用构造函数 __init__() 来为每一个对象初始化两个属性:name 和 type。在 __init__() 中,self 指向的是当前实例化的对象。例如执行 h1 = Hero('船长', '力量型') 之后,self 指向的是 h1 这个对象,而执行 h2 = Hero('先知', '智力型') 之后,self 指向的是 h2 这个对象。
对于构造函数,小伙伴们只需要记住一句话就可以了:构造函数用于接收不同的参数,让你的类可以生成不同的对象。
Python 魔法方法
在类的定义中,可以使用 __init__() 这样的方法。像这种在类中自带的、被双下划线前后包围的方法,被称之为 “魔法方法(Magic Method)”。在 Python 中,魔法方法其实有数十种之多,常用的有以下几种:
- __init__():初始化对象。
- __new__(): 创建实例对象。
- __del__(): 销毁对象。
- __str__(): 返回对象的描述信息。
- __bool__():返回对象逻辑值,使用 bool() 时调用。
- __len__():返回对象长度,使用 len() 时调用。
这些魔法方法都是在类中定义的,并且名称是固定的。魔法方法在类或对象进行特定的操作时会 “自动调用”,我们可以重写这些魔法方法来添加各种特殊的功能以满足实际开发需求。
