📖 知识点
init 基础语法
class 类名:
def __init__(self, 参数1, 参数2):
# 绑定实例属性
self.属性1 = 参数1
self.属性2 = 参数2
要点拆解:
__init__:前后两个下划线,读作 dunder init,构造方法创建对象的时候自动执行,不需要手动调用
第一个参数必须是
self,代表当前正在创建的对象本身self.xxx:给这个对象绑定属性,每个对象的属性相互独立实例化传参:
对象 = 类名(实参1,实参2),实参会传给__init__(self 不用传)
示例代码
class Student:
def __init__(self, name, age):
# 给当前对象绑定name和age属性
self.name = name
self.age = age
# 实例化,括号内传入参数,传给__init__
stu1 = Student("小明",16)
print(stu1.name)
print(stu1.age)
输出:
小明
16
⚠️ 易错提醒
__init__是双下划线,少写就不再是构造方法self 必须写在第一个位置,实例化的时候不要给 self 传值
self.name是对象属性;单独的 name 只是函数局部变量
⚔️ Kata 实战任务
任务需求:
定义
Student类编写
__init__,接收 3 个参数:name、age、score,绑定到 self实例化两个学员对象
stu1:小红,15,92
stu2:小刚,16,75
分别打印两个对象的 name、age、score
参考代码
class Student:
# 构造方法,实例对象自动执行
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
# 实例化,传入属性
stu1 = Student("小红", 15, 92)
stu2 = Student("小刚", 16, 75)
print(f"学员1:姓名{stu1.name},年龄{stu1.age},分数{stu1.score}")
print(f"学员2:姓名{stu2.name},年龄{stu2.age},分数{stu2.score}")
运行输出:
学员1:姓名小红,年龄15,分数92
学员2:姓名小刚,年龄16,分数75
🧠 思考题
如果实例化
Student("小李"),少传 age 和 score,会发生什么?self.name和__init__的参数 name,二者有什么区别?