一、什么是类?
类就像是创建对象的"蓝图"或"模板"。想象一下:
-
一个饼干模具(类)可以做出很多个饼干(对象)
-
每个饼干都有相同的形状(属性),但可以是不同的口味(属性值)
二、为什么要用类?
-
组织代码:把相关的数据和功能放在一起
-
代码重用:创建多个相似对象时不用重复写代码
-
模拟现实世界:用代码表示现实中的事物(如用户、商品、订单等)
三、基本语法
1. 定义一个简单的类
# 定义一个"人"的类
class Person:
# 类的属性(所有对象共享)
species = "人类"
# 初始化方法(创建对象时自动调用)
def __init__(self, name, age):
# 实例属性(每个对象独有)
self.name = name # self.name 是属性,name 是参数
self.age = age
# 实例方法(对象可以调用的函数)
def introduce(self):
print(f"大家好,我叫{self.name},今年{self.age}岁")
# 创建对象(根据类创建具体的人)
person1 = Person("小明", 20)
person2 = Person("小红", 22)
# 使用对象
person1.introduce() # 输出:大家好,我叫小明,今年20岁
person2.introduce() # 输出:大家好,我叫小红,今年22岁
# 访问属性
print(person1.name) # 输出:小明
print(Person.species) # 输出:人类
2. 关键概念解释
-
class:定义类的关键字 -
__init__():特殊方法,创建对象时自动调用(构造函数) -
self:代表对象自己,在方法中用来访问对象的属性和方法 -
对象:根据类创建的实例(如
person1)
四、类的三要素
1. 属性(数据)
class Student:
def __init__(self, name, score):
self.name = name # 姓名属性
self.score = score # 分数属性
self.grade = None # 等级属性(初始为空)
def calculate_grade(self):
if self.score >= 90:
self.grade = "A"
elif self.score >= 80:
self.grade = "B"
else:
self.grade = "C"
# 使用
student = Student("张三", 85)
student.calculate_grade()
print(f"{student.name}的等级是{student.grade}") # 输出:张三的等级是B
2. 方法(功能)
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.balance = balance
# 存款方法
def deposit(self, amount):
self.balance += amount
print(f"存款{amount}元,余额:{self.balance}元")
# 取款方法
def withdraw(self, amount):
if amount <= self.balance:
self.balance -= amount
print(f"取款{amount}元,余额:{self.balance}元")
else:
print("余额不足!")
# 查询方法
def check_balance(self):
print(f"账户余额:{self.balance}元")
# 使用
account = BankAccount("李四", 1000)
account.deposit(500) # 存款500元,余额:1500元
account.withdraw(200) # 取款200元,余额:1300元
account.check_balance() # 账户余额:1300元
3. 继承(代码重用)
# 父类(基类)
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name}在叫")
# 子类(派生类)继承父类
class Dog(Animal):
# 可以重写父类的方法
def speak(self):
print(f"{self.name}汪汪叫")
# 可以添加新方法
def wag_tail(self):
print(f"{self.name}在摇尾巴")
class Cat(Animal):
def speak(self):
print(f"{self.name}喵喵叫")
# 使用
dog = Dog("旺财")
cat = Cat("小花")
dog.speak() # 输出:旺财汪汪叫
cat.speak() # 输出:小花喵喵叫
dog.wag_tail() # 输出:旺财在摇尾巴
五、完整示例:图书管理系统
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
self.is_borrowed = False
def borrow(self):
if not self.is_borrowed:
self.is_borrowed = True
print(f"《{self.title}》借阅成功")
else:
print(f"《{self.title}》已被借出")
def return_book(self):
self.is_borrowed = False
print(f"《{self.title}》归还成功")
def __str__(self):
status = "已借出" if self.is_borrowed else "可借阅"
return f"《{self.title}》- {self.author},{self.pages}页,状态:{status}"
class Library:
def __init__(self):
self.books = []
def add_book(self, book):
self.books.append(book)
print(f"添加书籍:{book.title}")
def list_books(self):
if not self.books:
print("图书馆暂无书籍")
else:
print("=== 图书馆藏书 ===")
for book in self.books:
print(book)
print("=================")
# 使用图书馆系统
# 创建图书馆
library = Library()
# 添加书籍
book1 = Book("Python入门", "张三", 300)
book2 = Book("算法导论", "李四", 500)
library.add_book(book1)
library.add_book(book2)
# 查看所有书籍
library.list_books()
# 借阅书籍
book1.borrow()
library.list_books() # 可以看到状态变为"已借出"
# 归还书籍
book1.return_book()
library.list_books() # 状态变回"可借阅"
常见问题
Q: 为什么要用 self.?
A: self. 用来区分是对象的属性还是普通变量
Q: __init__ 是必须的吗?
A: 不是必须的,但如果需要初始化对象属性,就需要它
Q: 类和对象是什么关系?
A: 类是蓝图,对象是根据蓝图创建的具体事物。一个类可以创建多个对象。
记住:类 = 图纸,对象 = 根据图纸造的房子
转载请注明:宗宗酱-(David编程老师)++>Python中的类
宗宗酱
