Python小记——面向对象程序设计

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. 小结

本文主要介绍了面向对象程序设计的相关概念,包括类和对象、构造方法和析构方法、继承和多态等。面向对象程序设计是一种强大的解决问题的编程思想,可以提高程序的可扩展性和可维护性。

后端开发标签