跳转至

面向对象编程:类与对象

面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它使用“对象”来设计应用程序和软件。Python是一种支持面向对象编程的语言,允许开发者通过定义类和创建对象来组织代码。在本章中,我们将学习如何定义类、创建对象以及访问对象的属性和方法。

1. 什么是类与对象?

1.1 类的定义

类(Class)是面向对象编程中的核心概念。类是一个蓝图或模板,用于创建对象。它定义了对象的属性(数据)和方法(行为)。类可以看作是现实世界中某个实体的抽象表示。

1.2 对象的定义

对象(Object)是类的实例。通过类创建的对象具有类中定义的属性和方法。每个对象都是独立的,拥有自己的状态和行为。

2. 定义类

在Python中,使用class关键字来定义一个类。类名通常采用驼峰命名法(CamelCase),即每个单词的首字母大写。

# 定义一个简单的类
class Dog:
    # 类的属性(类变量)
    species = "Canis familiaris"

    # 初始化方法(构造函数)
    def __init__(self, name, age):
        # 实例属性
        self.name = name
        self.age = age

    # 实例方法
    def bark(self):
        return f"{self.name} says woof!"

2.1 解释

  • species 是一个类变量,所有实例共享这个变量。
  • __init__ 是一个特殊的方法,称为构造函数。它在创建对象时自动调用,用于初始化对象的属性。
  • self 是一个指向对象本身的引用,用于访问对象的属性和方法。
  • bark 是一个实例方法,定义了对象的行为。

3. 创建对象

通过类创建对象的过程称为实例化。实例化时,Python会自动调用__init__方法来初始化对象。

# 创建Dog类的实例
my_dog = Dog("Buddy", 5)

# 访问对象的属性
print(my_dog.name)  # 输出: Buddy
print(my_dog.age)   # 输出: 5

# 调用对象的方法
print(my_dog.bark())  # 输出: Buddy says woof!

3.1 解释

  • my_dogDog类的一个实例。
  • my_dog.namemy_dog.age 是实例属性。
  • my_dog.bark() 调用了实例方法。

4. 访问对象的属性和方法

对象的属性和方法可以通过点号(.)来访问。

# 访问类变量
print(Dog.species)  # 输出: Canis familiaris

# 修改实例属性
my_dog.age = 6
print(my_dog.age)  # 输出: 6

# 调用实例方法
print(my_dog.bark())  # 输出: Buddy says woof!

4.1 解释

  • Dog.species 访问类变量。
  • my_dog.age = 6 修改了实例属性。
  • my_dog.bark() 调用了实例方法。

5. 代码示例

5.1 示例1:定义一个简单的类

class Car:
    # 类变量
    wheels = 4

    # 构造函数
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

    # 实例方法
    def description(self):
        return f"{self.year} {self.make} {self.model}"

# 创建Car类的实例
my_car = Car("Toyota", "Corolla", 2020)

# 访问属性和方法
print(my_car.wheels)  # 输出: 4
print(my_car.description())  # 输出: 2020 Toyota Corolla

5.2 示例2:修改实例属性

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def celebrate_birthday(self):
        self.age += 1
        return f"Happy Birthday, {self.name}! You are now {self.age} years old."

# 创建Person类的实例
person = Person("Alice", 30)

# 调用方法修改属性
print(person.celebrate_birthday())  # 输出: Happy Birthday, Alice! You are now 31 years old.

5.3 示例3:使用类变量

class Circle:
    # 类变量
    pi = 3.14159

    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return self.pi * (self.radius ** 2)

# 创建Circle类的实例
circle = Circle(5)

# 计算面积
print(circle.area())  # 输出: 78.53975

6. 练习题

6.1 简单练习

定义一个Book类,包含以下属性和方法: - 属性:title, author, year - 方法:description(),返回书籍的描述信息。

创建一个Book对象,并调用description()方法。

6.2 中等练习

定义一个BankAccount类,包含以下属性和方法: - 属性:account_number, balance - 方法:deposit(amount), withdraw(amount), get_balance()

创建一个BankAccount对象,并进行存款、取款操作,最后打印余额。

6.3 复杂练习

定义一个Student类,包含以下属性和方法: - 属性:name, age, grades(一个列表,存储学生的成绩) - 方法:add_grade(grade), average_grade()

创建一个Student对象,添加多个成绩,并计算平均成绩。

7. 总结

  • 是对象的蓝图,定义了对象的属性和方法。
  • 对象是类的实例,具有类中定义的属性和方法。
  • 使用class关键字定义类,使用__init__方法初始化对象。
  • 通过点号(.)访问对象的属性和方法。
  • 类变量是所有实例共享的,而实例变量是每个对象独有的。

通过本章的学习,你应该能够定义类、创建对象,并访问对象的属性和方法。继续练习这些概念,以便更好地掌握面向对象编程的基础。