一、为什么需要类?
用 Python 写代码时,我们一开始常常用函数(def)来封装逻辑,但遇到复杂问题就会力不从心 —— 比如要管理多个'学生'信息(姓名、成绩、选课),如果用变量存储,会散落一堆;用列表/字典,又难统一操作逻辑。
Python 类的基础语法、对象创建及属性方法访问,阐述封装、继承、多态三大核心特性,并提供图书管理系统的实战代码示例,帮助开发者理解面向对象编程思想。

用 Python 写代码时,我们一开始常常用函数(def)来封装逻辑,但遇到复杂问题就会力不从心 —— 比如要管理多个'学生'信息(姓名、成绩、选课),如果用变量存储,会散落一堆;用列表/字典,又难统一操作逻辑。
而**类(Class)**就像一个'模板',能把数据(属性)和操作数据的逻辑(方法)打包在一起,让代码更整洁、可复用、易维护。简单说:类是创建对象的'蓝图',对象是类的'实例'—— 比如'学生'是类,'小明(姓名:小明,成绩:90)'就是这个类的对象。
用 class 关键字定义类,类名通常首字母大写(规范),括号里可指定父类(默认是 object,即所有类的基类)。
# 定义一个'学生'类
class Student:
# 初始化方法:创建对象时自动调用,给对象赋初始属性
def __init__(self, name, score):
# self:指代当前创建的对象,必须作为第一个参数
self.name = name # 给对象添加'姓名'属性
self.score = score # 给对象添加'成绩'属性
# 自定义方法:操作对象属性的逻辑
def show_info(self):
# 打印学生信息
print(f"姓名:{self.name},成绩:{self.score}")
def get_grade(self):
# 根据成绩判断等级
if self.score >= 90:
return "A"
elif self.score >= 80:
return "B"
else:
return "C"
定义好类后,像调用函数一样创建对象,传入 __init__ 方法需要的参数(除了 self)。
# 创建第一个学生对象:小明
xiaoming = Student("小明", 92)
# 创建第二个学生对象:小红
xiaohong = Student("小红", 85)
用'对象。属性''对象。方法 ()'的方式操作对象。
# 访问属性
print(xiaoming.name) # 输出:小明
print(xiaohong.score) # 输出:85
# 调用方法
xiaoming.show_info() # 输出:姓名:小明,成绩:92
print(xiaohong.get_grade()) # 输出:B
# 修改属性
xiaoming.score = 95
xiaoming.show_info() # 输出:姓名:小明,成绩:95
封装就是把属性和方法'藏'在类里,只暴露必要的接口(方法),外部不用关心内部实现。比如 get_grade 方法,外部调用时只需要知道传入对象,不用管判断逻辑。
继承允许一个类(子类)继承另一个类(父类)的属性和方法,减少重复代码。子类可以新增属性/方法,也可以重写父类方法。
# 父类:Person(人)
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print(f"{self.name}在吃饭")
# 子类:Student(学生)继承 Person
class Student(Person):
# 重写__init__方法:新增 score 属性
def __init__(self, name, age, score):
# 调用父类的__init__方法,复用姓名、年龄属性
super().__init__(name, age)
self.score = score
# 新增方法:学习
def study(self):
print(f"{self.name}在学习,成绩:{self.score}")
# 创建学生对象
xiaoli = Student("小李", 18, 88)
xiaoli.eat() # 继承父类方法,输出:小李在吃饭
xiaoli.study() # 子类新增方法,输出:小李在学习,成绩:88
多态是指子类重写父类方法后,不同子类对象调用同一方法会有不同表现。
# 父类:Animal
class Animal:
def speak(self):
pass # 空实现,由子类重写
# 子类:Dog
class Dog(Animal):
def speak(self):
print("汪汪汪")
# 子类:Cat
class Cat(Animal):
def speak(self):
print("喵喵喵")
# 统一调用函数
def make_speak(animal):
animal.speak()
# 多态体现:不同对象调用同一方法,结果不同
dog = Dog()
cat = Cat()
make_speak(dog) # 输出:汪汪汪
make_speak(cat) # 输出:喵喵喵
用类来实现一个简单的'图书管理系统',包含添加图书、查询图书、删除图书功能。
class BookManager:
def __init__(self):
# 用列表存储图书信息,每个元素是字典
self.books = []
# 添加图书
def add_book(self, book_id, title, author):
# 判断图书是否已存在
for book in self.books:
if book["book_id"] == book_id:
print("该图书 ID 已存在!")
return
self.books.append({"book_id": book_id, "title": title, "author": author})
print("图书添加成功!")
# 查询所有图书
def show_all_books(self):
if not self.books:
print("暂无图书信息!")
return
print("=== 所有图书信息 ===")
for book in self.books:
print(f"ID:{book['book_id']},书名:{book['title']},作者:{book['author']}")
# 根据 ID 删除图书
def delete_book(self, book_id):
for book in self.books:
if book["book_id"] == book_id:
self.books.remove(book)
print("图书删除成功!")
return
print("未找到该图书 ID!")
# 测试代码
if __name__ == "__main__":
manager = BookManager()
manager.add_book(1, "Python 编程:从入门到实践", "埃里克·马瑟斯")
manager.add_book(2, "流畅的 Python", "卢西亚诺·拉马略")
manager.show_all_books()
manager.delete_book(1)
manager.show_all_books()
class,初始化属性用 __init__,方法第一个参数必须是 self;
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online