类和实例

Python面向对象编程教程:类与实例

1. 类和实例的基本概念

面向对象编程(OOP)的核心概念是类(Class)实例(Instance)

  • :抽象的模板,定义了一组属性和方法
  • 实例:根据类创建的具体对象,每个实例拥有独立的属性值

2. 定义类

在Python中,使用class关键字定义类:

class Student:
    pass

现代Python(3.x)中,不再需要显式继承object类,因为所有类默认继承自object

3. 创建实例

通过类名加括号创建实例:

bart = Student()
print(bart)  # <__main__.Student object at 0x...>
print(Student)  # <class '__main__.Student'>

4. 初始化方法 __init__

__init__是一个特殊方法,在创建实例时自动调用:

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

注意:

  • 方法名前后各有两个下划线:__init__
  • 第一个参数永远是self,表示实例本身
  • 创建实例时必须传入匹配的参数(除了self
bart = Student('Bart Simpson', 59)
print(bart.name)  # Bart Simpson
print(bart.score)  # 59

5. 实例方法

在类中定义的函数称为方法,第一个参数必须是self

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score
    
    def print_score(self):
        print(f'{self.name}: {self.score}')

调用方法:

bart = Student('Bart Simpson', 59)
bart.print_score()  # Bart Simpson: 59

6. 数据封装

面向对象的重要特性是将数据和对数据的操作封装在一起:

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score
    
    def get_grade(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'

使用示例:

lisa = Student('Lisa', 99)
bart = Student('Bart', 59)

print(lisa.name, lisa.get_grade())  # Lisa A
print(bart.name, bart.get_grade())  # Bart C

7. 动态属性

Python允许动态添加实例属性:

bart = Student('Bart Simpson', 59)
lisa = Student('Lisa Simpson', 87)

bart.age = 8  # 动态添加属性
print(bart.age)  # 8
print(lisa.age)  # AttributeError: 'Student' object has no attribute 'age'

8. 最佳实践

  1. 命名规范:类名使用大驼峰式(如StudentClass
  2. 类型提示:现代Python推荐添加类型提示
  3. 文档字符串:为类和方法添加文档说明

改进后的完整示例:

class Student:
    """学生类,包含姓名、分数等基本信息"""
    
    def __init__(self, name: str, score: float):
        """初始化学生实例
        
        Args:
            name: 学生姓名
            score: 考试分数
        """
        self.name = name
        self.score = score
    
    def print_score(self) -> None:
        """打印学生成绩"""
        print(f'{self.name}: {self.score}')
    
    def get_grade(self) -> str:
        """根据分数返回等级
        
        Returns:
            'A' - 90分及以上
            'B' - 60-89分
            'C' - 60分以下
        """
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'

9. 总结

  • 类是创建实例的模板,实例是具体的对象
  • __init__方法用于初始化实例
  • 方法是与类关联的函数,可以访问实例数据
  • 数据封装是OOP的重要特性
  • Python允许动态添加实例属性

通过面向对象编程,我们可以更好地组织代码,提高代码的可重用性和可维护性。