(Python)类和类的方法(基础教程介绍)(Python基础教程)

发布于:2025-07-20 ⋅ 阅读:(13) ⋅ 点赞:(0)

源代码:

class Students:
    stats="大学"
    def __init__(self,name,age,sex,credit):
        self.name=name
        self.age=age
        self.sex=sex
        self.credit=credit
    def tell(self):
        return f"{self.name}说:你好"

class Teachers(Students):
    stats="教师"
    def __init__(self, name, age, sex,pay):
        super().__init__(name, age, sex,0)
        self.pay=pay
    def tell(self):
        return f"{self.name}说:我不好"
student=Students("大炮",21,"男",10)
print(student.tell())
print(student.stats)
print(student.credit)

teacher=Teachers("富贵",55,"男",10000)
print(teacher.tell())
print(teacher.stats)
print(teacher.pay)     

代码详解:

Python 类(Class)完全新手教程:从零理解面向对象编程

一、为什么需要类?真实世界类比

想象你要管理一所大学的学生和教师信息。没有类时,你需要这样存储数据:

# 学生信息
student1_name = "大炮"
student1_age = 21
student1_sex = "男"
student1_credit = 10

# 教师信息
teacher1_name = "富贵"
teacher1_age = 55
teacher1_sex = "男"
teacher1_pay = 10000

这种方式的三大问题

  1. 数据分散:相关信息分散在不同变量中

  2. 管理困难:添加新学生需要创建多个变量

  3. 行为缺失:无法定义与数据相关的操作(如自我介绍)

类的解决方案:

class Person:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
    
    def introduce(self):
        return f"我是{self.name},{self.age}岁"

student = Person("大炮", 21, "男")
teacher = Person("富贵", 55, "男")

二、类的基本结构详解

学生类代码分析
class Students:  # 1. 类定义
    stats = "大学"  # 2. 类属性
    
    # 3. 构造方法
    def __init__(self, name, age, sex, credit):
        # 4. 实例属性初始化
        self.name = name
        self.age = age
        self.sex = sex
        self.credit = credit
    
    # 5. 实例方法
    def tell(self):
        return f"{self.name}说:你好"
五个核心组件:
  1. 类定义class 类名:

    • 类名使用大驼峰命名法(如Students

    • 创建对象的蓝图

  2. 类属性

    • 定义在类内部,方法外部

    • 所有对象共享同一值

    print(Students.stats)  # "大学"
  3. 构造方法 __init__

    • 创建对象时自动调用

    • self 参数代表当前对象(必须存在)

    • 用于初始化对象状态

  4. 实例属性

    • __init__中通过self.属性名=值定义

    • 每个对象有独立副本

    student1 = Students("小明", 20, "男", 5)
    student2 = Students("小红", 19, "女", 8)
    print(student1.name)  # "小明"
    print(student2.name)  # "小红"(不同值)
  5. 实例方法

    • 定义在类中的函数

    • 第一个参数必须是self

    • 通过对象调用:对象.方法()

    print(student1.tell())  # "小明说:你好"

三、创建和使用对象:从蓝图到实体

实例化过程
# 创建学生对象
student = Students("大炮", 21, "男", 10)

内存中发生了什么

  1. Python 在内存中分配新空间

  2. 调用 __init__ 方法:

    Students.__init__(student, "大炮", 21, "男", 10)
  3. 初始化属性:

    student.name = "大炮"
    student.age = 21
    student.sex = "男"
    student.credit = 10
访问对象成员
# 访问属性
print(student.name)     # "大炮"(实例属性)
print(student.stats)    # "大学"(类属性)

# 调用方法
print(student.tell())   # "大炮说:你好"

📌 重要提示:类属性 vs 实例属性

Students.stats = "学院"  # 修改类属性
print(student.stats)    # 输出"学院"(所有对象同步改变)

student.name = "小炮"   # 修改实例属性
print(student.name)     # 输出"小炮"(仅影响当前对象)

四、继承:创建教师类

继承是面向对象的核心概念,允许我们基于现有类创建新类。

你的教师类代码分析
class Teachers(Students):  # 1. 继承语法
    stats = "教师"  # 2. 重写类属性
    
    # 3. 重写构造方法
    def __init__(self, name, age, sex, pay):
        # 4. 调用父类构造方法
        super().__init__(name, age, sex, 0)  # 学分设为0
        self.pay = pay  # 5. 添加新属性
    
    # 6. 重写方法
    def tell(self):
        return f"{self.name}说:我不好"
继承六大要点:
  1. 继承语法class 子类(父类)

    • 教师类继承学生类的所有属性和方法

  2. 重写类属性

    • 子类定义同名属性覆盖父类

    python

    print(Teachers.stats)  # "教师"(而非"大学")
  3. 重写构造方法

    • 子类可以定义自己的__init__

  4. super()函数

    • 调用父类的方法

    • super().__init__(参数) 初始化继承的属性

    • 必须放在子类构造方法开头

  5. 添加新属性

    self.pay = pay  # 教师特有属性
  6. 重写方法

    • 定义同名方法覆盖父类实现

    teacher.tell()  # 调用子类版本:"富贵说:我不好"
继承关系图解


五、完整代码执行流程分析

# ====== 学生部分 ======
student = Students("大炮", 21, "男", 10)

# 1. 创建Students对象
# 2. 调用__init__:设置name="大炮", age=21, sex="男", credit=10
# 3. 类属性stats="大学"

print(student.tell())   # 4. 调用tell() → "大炮说:你好"
print(student.stats)    # 5. 访问类属性 → "大学"
print(student.credit)   # 6. 访问实例属性 → 10

# ====== 教师部分 ======
teacher = Teachers("富贵", 55, "男", 10000)

# 7. 创建Teachers对象
# 8. 调用Teachers.__init__ 
# 9. 在Teachers.__init__中:
#     - super().__init__(name, age, sex, 0) → 调用Students.__init__
#     - 设置pay=10000
# 10. 类属性stats="教师"(覆盖父类)

print(teacher.tell())   # 11. 调用重写的tell() → "富贵说:我不好"
print(teacher.stats)    # 12. 访问重写的类属性 → "教师"
print(teacher.pay)      # 13. 访问新增属性 → 10000
print(teacher.credit)   # 14. 访问继承属性 → 0

六、常见问题解决方案(基于真实错误)

问题1:忘记self参数
# 错误:方法缺少self
def tell():  # ❌ 缺少self
    return "你好"

# 正确:
def tell(self):  # ✅
    return f"{self.name}说:你好"
问题2:属性初始化错误
# 错误:未正确赋值
self.credit  # ❌ 缺少赋值操作

# 正确:
self.credit = credit  # ✅
问题3:继承时参数不匹配
# 错误:父类需要4个参数,只传了3个
super().__init__(name, age, sex)  # ❌

# 正确:添加缺失参数
super().__init__(name, age, sex, 0)  # ✅
问题4:混淆类属性和实例属性
# 错误:在方法中错误定义类属性
def __init__(self, name):
    self.stats = "学院"  # ❌ 这是实例属性
    
# 正确定义类属性:
class Students:
    stats = "大学"  # ✅ 类属性

七、类设计最佳实践

  1. 单一职责原则:每个类只负责一个功能领域

  2. 命名规范

    • 类名:大驼峰 UniversityPerson

    • 方法名:小写蛇形 calculate_grade

    • 属性名:小写蛇形 student_id

  3. 封装思想:隐藏内部细节,暴露必要接口

    class BankAccount:
        def __init__(self, balance):
            self.__balance = balance  # 私有属性
        
        def deposit(self, amount):  # 公开接口
            if amount > 0:
                self.__balance += amount
  4. 使用属性装饰器

    class Circle:
        def __init__(self, radius):
            self.radius = radius
        
        @property
        def area(self):  # 作为属性访问
            return 3.14 * self.radius ** 2
    
    c = Circle(5)
    print(c.area)  # 78.5(不是c.area())

八、扩展练习:打造校园管理系统

# 1. 添加课程类
class Course:
    def __init__(self, name, credit):
        self.name = name
        self.credit = credit
        self.students = []
    
    def enroll(self, student):
        self.students.append(student)
        student.credit += self.credit
        return f"{student.name}已选课《{self.name}》"

# 2. 改进学生类
class Students:
    # ...原有代码...
    
    def take_course(self, course):
        return course.enroll(self)

# 3. 使用示例
math = Course("高等数学", 4)
student = Students("小明", 20, "男", 0)

print(student.take_course(math))  # 小明已选课《高等数学》
print(f"小明学分:{student.credit}")  # 4
print(f"选课学生:{[s.name for s in math.students]}")  # ['小明']

九、学习路径建议

  1. 基础阶段

    • 创建简单类(如BookCar

    • 练习__init__和属性定义

    • 添加基本方法

  2. 中级阶段

    • 实现类继承(如ElectricCar继承Car

    • 使用方法重写

    • 学习super()的使用

  3. 高级阶段

    • 掌握特殊方法(__str____len__

    • 使用属性装饰器@property

    • 实现简单的类关系(如学生-课程关系)

  4. 项目实践

💡 终极建议:从你的学生/教师类出发,逐步添加:

  1. 成绩管理功能

  2. 课程表系统

  3. 校园卡消费功能

  4. 数据持久化(存储到文件)

掌握类的核心概念后,你将能够构建更复杂、更易维护的Python程序!🚀


网站公告

今日签到

点亮在社区的每一天
去签到