一、先搞懂:什么是类?什么是实例?
1. 一句话定义
- 类(Class) :抽象模板,比如「学生」
- 实例(Instance) :具体对象,比如「小明」「小红」
举个生活例子:
- 类 = 「手机」(模板,不是真手机)
- 实例 = 「你的 iPhone」「妈妈的安卓机」(真真实实的对象)
2. Python 怎么定义类?
用 class 关键字,固定格式:
# 定义一个学生类(模板)
class Student(object):
pass
Student:类名(大写开头)(object):固定写法,表示继承(不用深究,照着写就行)pass:空占位,先定义个空类
3. 怎么创建实例?
类名 + 括号 ()
# 创建一个具体的学生:bart
bart = Student()
# 再创建一个学生:lisa
lisa = Student()
👉 bart 和 lisa 就是两个独立的实例!
二、给实例绑定属性(名字、分数)
实例可以自由加属性,非常灵活:
bart = Student()
# 给 bart 绑定名字和分数
bart.name = "Bart Simpson"
bart.score = 59
print(bart.name) # 输出:Bart Simpson
print(bart.score) # 输出:59
三、超级重要:init 初始化方法
1. 作用
创建实例时自动绑定属性,不用手动一个个加。
2. 固定写法(必须背会)
class Student(object):
# 初始化方法:前后两个下划线!!
def __init__(self, name, score):
# 把参数绑定到实例自身
self.name = name
self.score = score
3. 关键点
__init__前后必须两个下划线- 第一个参数永远是 self(代表实例自己)
- 创建实例时,不用传 self,只传后面的参数
4. 使用示例
# 直接传 name 和 score,自动绑定
bart = Student("Bart Simpson", 59)
print(bart.name) # Bart Simpson
print(bart.score) # 59
四、数据封装:把函数放进类里(方法)
1. 什么是封装?
把数据 + 操作数据的函数,都放进类里,外部直接调用,不用管内部怎么实现。
2. 定义类的方法
和普通函数一样,第一个参数必须是 self
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
# 封装:打印成绩
def print_score(self):
print(f"{self.name}: {self.score}")
# 封装:判断等级
def get_grade(self):
if self.score >= 90:
return "A"
elif self.score >= 60:
return "B"
else:
return "C"
3. 调用方法(超级简单)
bart = Student("Bart", 59)
lisa = Student("Lisa", 99)
bart.print_score() # 输出:Bart: 59
print(bart.get_grade()) # 输出:C
print(lisa.get_grade()) # 输出:A
五、必记 3 个小结
- 类是模板,实例是具体对象
__init__(self, ...)初始化属性,self 必须写第一个- 类里的函数叫方法 ,调用时
实例.方法(),不用传 self
练习题(入门级,带答案)
练习题 1:定义类 + 创建实例
定义一个 Person 类,包含 name 和 age 属性,创建一个实例 zhangsan,名字张三,年龄 20,打印他的名字和年龄。
#代码 豆包
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
zhangsan = Person("张三", 20)
print(zhangsan.name)
print(zhangsan.age)
#代码 自己写
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def print_info(self):
print('名字是',self.name)
print('年龄是',self.age)
person1=Person('张三',20) #age不能加引号 因为age不是字符串
person1.print_info()
练习题 2:给类加方法
给上面的 Person 类加一个方法 introduce(),输出:我叫XX,今年XX岁
#代码 豆包
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"我叫{self.name},今年{self.age}岁")
zhangsan = Person("张三", 20)
zhangsan.introduce()
#代码 自己写
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def print_info(self):
print('名字是',self.name)
print('年龄是',self.age)
def introduce(self):
print('我叫',self.name,',今年',self.age,'岁')
person1=Person('张三',20) #age不能加引号 因为age不是字符串
person1.print_info()
person1.introduce()
练习题 3:综合练习(必做)
定义一个 Dog 类:
- 属性:名字
name,品种breed - 方法:
bark(),输出汪汪汪!我是XX(品种)XX(名字)
创建一只金毛「旺财」,调用 bark()。
#代码 豆包
class Dog(object):
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print(f"汪汪汪!我是{self.breed}{self.name}")
wangcai = Dog("旺财", "金毛")
wangcai.bark()
#代码 自己写
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print('汪汪汪!','我是',self.breed,self.name)
dog1=Dog('旺财','金毛犬')
dog1.bark()
总结
- 类 = 模板,实例 = 具体对象
__init__(self, ...)用来初始化属性,self 是固定第一个参数- 类里的函数叫方法,封装数据和逻辑,外部直接调用
- 实例之间数据独立,互不影响