类

构造函数

构造函数,也称为构造器、构造方法,用于创建和初始化对象。
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-官网文档-可调用类型 类

Python 3.15-官网文档-内置函数 super()

posted @ 2026-10-22 02:57  松鼠q  阅读(4)  评论(0)    收藏  举报