前言

Python 是一种支持面向对象编程(OOP)的语言,其中是核心概念。类是一种蓝图或模板,用于定义对象的属性和行为。本文将从零开始,详细介绍类的定义、使用,以及在实际编程中的应用


一、什么是类和对象?

  1. 类: 类是对象的模板,它定义了对象的属性(数据)和方法(行为)

  2. 对象: 对象是类的实例。通过类,可以创建多个具有相同属性和方法的对象

现实类比:

  • 类是蓝图,比如“手机”是一个类

  • 对象是基于蓝图创建的具体实例,比如“苹果手机”和“安卓手机”


二、如何定义类

使用 class 关键字定义一个类,类名通常遵循大写驼峰命名法(如 MyClass

2.1 类的基本结构

class ClassName:
    """类的文档字符串,用于描述类的用途(可选)"""
    # 类属性
    # 方法

2.2 示例:定义一个简单的类

class Person:
    """一个表示人的类"""
    
    def greet(self):
        """打印问候语"""
        print("你好,我是一个人!")

2.3 创建对象

对象是类的实例,使用类名加括号来创建对象

# 创建对象
p = Person()
​
# 调用方法
p.greet()

运行结果:

你好,我是一个人!

三、类的构造函数和属性

3.1 构造函数:__init__ 方法

构造函数是类的特殊方法,用于在创建对象时初始化对象的属性

class Person:
    def __init__(self, name, age):
        """构造函数"""
        self.name = name  # 定义实例属性
        self.age = age
​
    def greet(self):
        print(f"你好,我叫 {self.name},今年 {self.age} 岁。")

3.2 创建对象并初始化属性

p = Person("小明", 20)
p.greet()

运行结果:

你好,我叫 小明,今年 20 岁。

四、类的属性和方法

4.1 类属性

  • 类属性是所有对象共享的变量,定义在类级别

  • 使用 ClassName.attribute 访问

class Person:
    species = "人类"  # 类属性
​
    def __init__(self, name):
        self.name = name  # 实例属性
​
# 类属性访问
print(Person.species)  # 输出 "人类"
​
# 实例属性访问
p = Person("小明")
print(p.name)          # 输出 "小明"

4.2 实例属性

  • 每个对象都有独立的实例属性

  • 使用 self 引用实例属性

class Dog:
    def __init__(self, name, breed):
        self.name = name   # 狗的名字
        self.breed = breed # 狗的品种
​
# 创建实例
dog = Dog("小黑", "拉布拉多")
print(dog.name)  # 输出 "小黑"
print(dog.breed) # 输出 "拉布拉多"

4.3 类方法和静态方法

类方法(@classmethod

  • 使用 @classmethod 装饰器定义。

  • 第一个参数是类本身(通常命名为 cls)。

class Person:
    species = "人类"
    
    @classmethod
    def describe(cls):
        print(f"这是一个 {cls.species} 类。")
​
Person.describe()  # 输出 "这是一个 人类 类。"

静态方法(@staticmethod

  • 使用 @staticmethod 装饰器定义

  • 不需要访问实例或类

class Math:
    @staticmethod
    def add(a, b):
        return a + b
​
print(Math.add(5, 3))  # 输出 8

五、继承和多态

5.1 什么是继承?

继承是面向对象的重要特性,允许一个类(子类)从另一个类(父类)继承属性和方法

class Animal:
    def speak(self):
        print("动物在叫。")
​
# Dog 类继承 Animal
class Dog(Animal):
    def speak(self):
        print("汪汪!")
​
# 创建实例
dog = Dog()
dog.speak()  # 输出 "汪汪!"

5.2 多态

多态指的是子类可以重写父类的方法,调用时会根据对象的实际类型执行对应的方法

class Cat(Animal):
    def speak(self):
        print("喵喵!")
​
animals = [Dog(), Cat()]
for animal in animals:
    animal.speak()

运行结果:

汪汪!
喵喵!

六、封装

封装是面向对象编程中的重要概念,用于隐藏类的内部实现细节

6.1 私有属性和方法

在 Python 中,使用双下划线 __ 开头定义私有属性或方法

class Person:
    def __init__(self, name, age):
        self.__name = name  # 私有属性
        self.__age = age
​
    def __secret(self):  # 私有方法
        print("这是一个秘密!")
​
    def show_info(self):
        print(f"名字:{self.__name},年龄:{self.__age}")
        self.__secret()
​
# 创建对象
p = Person("小明", 20)
p.show_info()  # 正常访问

运行结果:

名字:小明,年龄:20
这是一个秘密!

七、特殊方法

Python 提供了一些特殊方法,用于实现内置操作

方法

描述

示例

__init__

构造函数,初始化对象

创建对象时自动调用

__str__

定义对象的字符串表示

print(obj)

__len__

定义对象的长度

len(obj)

__add__

定义对象的加法行为

obj1 + obj2


7.1 示例:重写 __str__

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
​
    def __str__(self):
        return f"Person(name={self.name}, age={self.age})"
​
p = Person("小明", 20)
print(p)  # 输出 "Person(name=小明, age=20)"

八、综合示例:学生管理系统

class Student:
    """学生类"""
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade
​
    def show_info(self):
        print(f"姓名:{self.name},成绩:{self.grade}")
​
class ClassRoom:
    """班级类"""
    def __init__(self):
        self.students = []
​
    def add_student(self, student):
        self.students.append(student)
​
    def show_all(self):
        for student in self.students:
            student.show_info()
​
# 创建学生
s1 = Student("小明", 85)
s2 = Student("小红", 90)
​
# 创建班级并添加学生
classroom = ClassRoom()
classroom.add_student(s1)
classroom.add_student(s2)
​
# 展示所有学生信息
classroom.show_all()

运行结果:

姓名:小明,成绩:85
姓名:小红,成绩:90

九、总结

概念

描述

类和对象

类是模板,对象是实例

构造函数

__init__ 方法,用于初始化对象

类属性和方法

属性是对象的数据,方法是对象的功能

继承和多态

子类继承父类,并可重写父类方法

封装

隐藏类内部实现,通过接口与外界交互

特殊方法

提供内置操作的自定义行为