面向对象编程:类与对象¶
面向对象编程(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_dog
是Dog
类的一个实例。my_dog.name
和my_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__
方法初始化对象。 - 通过点号(
.
)访问对象的属性和方法。 - 类变量是所有实例共享的,而实例变量是每个对象独有的。
通过本章的学习,你应该能够定义类、创建对象,并访问对象的属性和方法。继续练习这些概念,以便更好地掌握面向对象编程的基础。