Python中的类

2025-12-07 7 0

一、什么是类?

就像是创建对象的"蓝图"或"模板"。想象一下:

  • 一个饼干模具(类)可以做出很多个饼干(对象)

  • 每个饼干都有相同的形状(属性),但可以是不同的口味(属性值)

二、为什么要用类?

  1. 组织代码:把相关的数据和功能放在一起

  2. 代码重用:创建多个相似对象时不用重复写代码

  3. 模拟现实世界:用代码表示现实中的事物(如用户、商品、订单等)

三、基本语法

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: 类是蓝图,对象是根据蓝图创建的具体事物。一个类可以创建多个对象。

记住:类 = 图纸,对象 = 根据图纸造的房子


相关文章

外婆手术很顺利
逛山姆的糗事
TurboWarp Desktop:更强更快的 Scratch 桌面编程利器
WordPress嵌入Scratch项目:基于Turbowarp的最佳实践
重庆的巫山包子「探店」
博客与微信公众号同步更新

发布评论

在线客服
我们将24小时内回复。
2025-12-07 16:51:54

您好,有任何疑问请与我们直接联系!

您的工单我们已经收到,我们将会尽快跟您联系!
取消
选择聊天工具: