1. 面向对象程序设计简介
面向对象程序设计(Object-Oriented Programming,OOP)是一种解决复杂问题的编程思想。与传统的面向过程的程序设计相比,面向对象程序设计更注重问题的分析和抽象能力,能够更好地解决大规模软件系统的开发问题。
1.1 面向对象程序设计的三大特征
面向对象程序设计的三大特征包括封装、继承和多态。
封装是指将数据和行为组合成一个类,并对外部隐藏数据的实现细节,只提供特定的接口进行访问。这样可以提高代码的安全性和可维护性。例如:
class Person:
def __init__(self, name, age):
self.__name = name # 将属性name私有化
self.__age = age
def getName(self):
return self.__name
def setName(self, name):
self.__name = name
p = Person('Tom', 18)
p.setName('Mike')
print(p.getName()) # 输出Mike,而不是Tom
继承是指一个类可以派生出子类,在子类中继承父类的属性和方法,并可以添加子类自己的属性和方法。这样可以减少代码的重复编写,提高程序的可扩展性。例如:
class Animal:
def __init__(self, name, age):
self.__name = name
self.__age = age
def getName(self):
return self.__name
def setName(self, name):
self.__name = name
class Cat(Animal): # Cat继承自Animal
def __init__(self, name, age, color):
super().__init__(name, age) # 调用父类的构造方法
self.__color = color # Cat新增了color属性
def getColor(self):
return self.__color
c = Cat('Tom', 2, 'white')
print(c.getName()) # 输出Tom
print(c.getColor()) # 输出white
多态是指一个对象可以拥有不同的形态,在不同的情况下表现出不同的行为,让程序能够更灵活地处理不同类型的对象。例如:
class Shape:
def draw(self):
pass
class Circle(Shape):
def draw(self):
print('画圆形')
class Square(Shape):
def draw(self):
print('画正方形')
def drawShape(shape):
shape.draw()
drawShape(Circle()) # 输出画圆形
drawShape(Square()) # 输出画正方形
2. 类和对象
在面向对象程序设计中,类是一种抽象的数据类型,它定义了一组属性和方法,用来描述一个对象的行为特征。对象是类的实例,具有该类所定义的属性和方法。下面介绍类和对象的相关概念。
2.1 定义类
定义一个类的语法是:
class 类名:
属性列表 # 用于定义类的属性
方法列表 # 用于定义类的方法
其中,类名通常采用首字母大写的驼峰命名法。
2.2 创建对象
创建对象的语法是使用类名来调用构造方法,例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def sayHello(self):
print(f'我是{self.name},今年{self.age}岁')
p1 = Person('Tom', 18)
p1.sayHello() # 输出“我是Tom,今年18岁”
此时p1就是Person的一个实例对象。
2.3 访问对象的属性和方法
访问对象的属性和方法需要使用“.”运算符,例如:
p1.name = 'Mike' # 修改p1的name属性
p1.sayHello() # 输出“我是Mike,今年18岁”
可以看到,使用“.”运算符可以对对象的属性进行读取和修改,也可以对对象的方法进行调用。
3. 构造方法和析构方法
每个类都有构造方法和析构方法,它们分别在创建对象时和销毁对象时被调用。
3.1 构造方法
构造方法是与类同名的一个特殊方法,在创建对象时自动被调用,用来初始化对象的属性。在Python中,构造方法的名称是__init__,它的第一个参数总是self。例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def sayHello(self):
print(f'我是{self.name},今年{self.age}岁')
p1 = Person('Tom', 18) # 创建对象时自动调用__init__方法进行初始化
p1.sayHello() # 输出“我是Tom,今年18岁”
3.2 析构方法
析构方法是与类同名的一个特殊方法,在销毁对象时自动被调用,用来释放对象占用的资源。在Python中,析构方法的名称是__del__,它不需要任何参数。例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __del__(self):
print('对象被销毁了')
p1 = Person('Tom', 18) # 创建对象
del p1 # 销毁对象时自动调用__del__方法
4. 继承和多态
在面向对象程序设计中,继承和多态是两个重要的概念。下面分别进行详细介绍。
4.1 继承
继承是指一个类可以派生出子类,在子类中继承父类的属性和方法,并可以添加子类自己的属性和方法。在Python中,继承的语法是:
class 子类名(父类名):
新增属性列表 # 添加子类自己的属性
新增方法列表 # 添加子类自己的方法
例如,我们可以定义一个父类Animal和一个子类Cat。
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def sayHello(self):
print(f'我是{self.name},今年{self.age}岁')
class Cat(Animal):
def __init__(self, name, age, color):
super().__init__(name, age) # 调用父类的构造方法
self.color = color
def catchMouse(self):
print('我会抓老鼠')
c1 = Cat('Tom', 2, 'white') # 创建Cat对象
c1.sayHello() # 输出“我是Tom,今年2岁”
c1.catchMouse() # 输出“我会抓老鼠”
可以看到,Cat类继承了Animal类的属性和方法,并添加了自己的颜色属性和抓老鼠方法。
4.2 多态
多态是指一个对象可以拥有不同的形态,在不同的情况下表现出不同的行为,让程序能够更灵活地处理不同类型的对象。在Python中,多态的实现依赖于继承和方法的重载。例如:
class Shape:
def draw(self):
pass
class Circle(Shape):
def draw(self):
print('画圆形')
class Square(Shape):
def draw(self):
print('画正方形')
def drawShape(shape):
shape.draw()
drawShape(Circle()) # 输出画圆形
drawShape(Square()) # 输出画正方形
可以看到,drawShape函数的参数是一个Shape对象,但是可以传入不同类的实例来实现不同的行为。
5. 小结
本文主要介绍了面向对象程序设计的相关概念,包括类和对象、构造方法和析构方法、继承和多态等。面向对象程序设计是一种强大的解决问题的编程思想,可以提高程序的可扩展性和可维护性。