类
构造函数
构造函数,也称为构造器、构造方法,用于创建和初始化对象。
Python中的构造函数有:
- __new__方法:创建对象(分配内存并返回被创建的对象/实例)
- __init__方法:初始化对象(设置实例属性)
以__init__方法为例:
__init__语法为__init__(self, 参数1, 参数2, ...),它可以接收任意多的参数,但必须至少声明一个形参(参数1、参数2、...可以省略)。第一个形参按约定接收正在初始化的实例,由 Python 在调用时自动传入,含义是实例自身,它的参数名可以任意,但 Python 官方和社区推荐命名为 self。
默认/空构造函数
object 是 Python 的内置数据类型,它属于可调用类型并自带一些方法,其中就包括了object.__init__方法。所有类都继承 object,换句话说 object 是 Python 类的超级基类/根基类,所有类都有来自 object 提供的方法。当定义类时省略定义 __init__ 方法(整个继承链都没有自定义 __init__方法),触发的就是默认构造函数 object.__init__方法。
# 定义一个角色类,所有角色的生命值为10、攻击力为1
class Hero:
health_points: int = 10
attack_points: int = 1
空构造函数是定义了__init__方法但是函数体为空,不做任何初始化,代码如下所示。
class Hero:
health_points: int = 10
attack_points: int = 1
def __init__(self):
pass
无参数构造函数
__init__方法只声明了一个参数。
class Hero:
health_points: int = 10
attack_points: int = 1
def __init__(self):
print('角色已创建,无初始化数值。')
带参数构造函数
__init__方法在第一个形参(通常命名为self)之外还声明了形参,在创建对象(实例化对象)时必须接收一些参数来初始化实例属性。
class Hero:
health_points: int = 10
attack_points: int = 1
# 初始化角色的属性,角色应该还有他的职业类型、所在阵营(帮派/战队)
# 若不指定阵营则默认为无阵营
def __init__(self, type_of_hero, group='无阵营'):
self.type_of_hero = type_of_hero
self.group = group
self 和 super
self是一个引用,指向当前对象/实例本身,可用于区分实例变量和与实例变量同名的参数。
super用于引用基类(无需显式指定基类名称),用来调用基类的方法。
# 创建角色类
class Hero: # 等同于class Hero(object):
# 类属性:所有角色共享的默认血量
health_points = 10
# 构造函数会将实例属性绑定到当前实例(self 所指对象)上
def __init__(self, type_of_hero, group):
self.type_of_hero = type_of_hero
self.group = group # self.group为实例变量,group为形参
# 创建法师类
class Wizard(Hero):
# 类属性:设置魔法攻击力、物理攻击力和主要攻击方式
magic_attack = 5
physical_attack = 1
main_attack_method = '法术攻击'
# 构造方法覆盖:子类会覆盖基类的同名方法(角色类的构造函数)
def __init__(self, group, attack_distance=None):
super().__init__('法师', group) # 等同于Hero.__init__(self, '法师', group)
self.attack_distance = attack_distance if attack_distance is not None else ['远程']
# 创建射手类
class Archer(Hero):
# 类属性:设置魔法攻击力、物理攻击力和主要攻击方式
magic_attack = 1
physical_attack = 5
main_attack_method = '物理攻击'
# 构造方法覆盖
def __init__(self, group, attack_distance=None):
# 调用基类的构造方法:将基类构造函数下定义的实例属性绑定到当前对象(Archer类的实例)上
super().__init__('射手', group)
self.attack_distance = attack_distance if attack_distance is not None else ['远程']
参考链接
Python 3.15-官网文档-关于object.__init__
Python 3.15-官网文档-类定义语法
Python 3.15-官网文档-内置类型 object
Python 3.15-官网文档-可调用类型 类

浙公网安备 33010602011771号