Python基础篇(七):面向对象的编程思想

面向对象

  • 前言
  • 1. 面向对象编程思想
    • 1.1 面向对象的相关概念
    • 1.2 面向对象的三大特性
  • 2. 类的定义
    • 2.1 使用class关键字定义类
    • 2.2 创建类对象并调用属性和方法
  • 3.面向对象思想示例
    • 3.1 详细示例:图形类的设计
    • 3.2 基类 `Shape`
    • 3.3 子类 `Circle`
    • 3.4 子类 `Rectangle`
    • 3.5 使用图形类

前言

面向对象编程(Object-Oriented Programming,简称OOP)是一种编程思想,它将数据和操作数据的方法封装在对象中。OOP的核心思想是以对象为中心,通过定义类来创建对象,并通过对象之间的交互来实现程序的功能。类的使用有助于组织和管理代码,并实现更高级的软件设计和开发。

1. 面向对象编程思想

1.1 面向对象的相关概念

  • 类:描述具有相同属性和方法的集合,简单来说就是模板(.py文件),通它来创建对象

  • 对象:类的实例

  • 方法:类中定义的函数

  • 类变量:定义在类中且在函数之外的变量,在所有实例化对象中公用

  • 局部变量:方法中定义的变量,只作用于当前实例

1.2 面向对象的三大特性

  1. 封装(Encapsulation):将数据和操作数据的方法封装在一个对象中,对象对外部隐藏了其内部实现细节,只暴露必要的接口供其他对象使用。
  2. 继承(Inheritance):通过创建子类来继承父类的属性和方法,子类可以重用父类的代码,并可以根据需要进行修改或扩展。
  3. 多态(Polymorphism):允许不同的对象对同一消息作出不同的响应,即不同的对象可以以自己的方式实现相同的方法。

2. 类的定义

2.1 使用class关键字定义类

在Python中,类的定义使用class关键字,后跟类的名称

示例:创建一个名为Person的类,表示人物,包含nameage属性,并具有一个greet方法来打招呼

class Person:# 构造函数def __init__(self, name, age):self.name = nameself.age = age# 对象方法def greet(self):print(f"你好,俺叫 {self.name} ,今年{self.age}岁了")

在上面的示例中,我们定义了一个Person类。

  • __init__方法表示构造函数,用于初始化对象的属性。
  • self参数代表对象本身,它在方法中使用,以访问对象的属性和方法。
  • nameage是对象的属性。
  • greet方法用于向其他人打招呼,并输出对象的姓名和年龄。

2.2 创建类对象并调用属性和方法

示例:创建Person类的对象,并访问属性和调用方法。

person1 = Person("Lin", 25)
person2 = Person("kobe", 30)print(person1.name)  # 输出: Lin
print(person2.age)  # 输出: 30person1.greet()  
person2.greet()

3.面向对象思想示例

3.1 详细示例:图形类的设计

通过以下示例来说明面向对象编程的思想:我们将设计一个简单的图形类层次结构,包括基类Shape和两个子类CircleRectangle,来表示圆和矩形。

下面是Shape类以及两个子类CircleRectangle之间的关系图示:

	         +-----------+|   Shape   |+-----------+^||+---------------+|               |+-------------+  +-------------+|   Circle    |  |  Rectangle  |+-------------+  +-------------+

3.2 基类 Shape

基类Shape表示图形的抽象概念,它具有通用的属性和方法。(这不奏是java的抽象类么)
在下面的示例中,Shape类具有一个构造函数__init__,用于初始化图形的颜色。它还定义了两个方法areaperimeter,这些方法在基类中只是占位符,需要在子类中实现

class Shape:def __init__(self, color):self.color = colordef area(self):passdef perimeter(self):pass

3.3 子类 Circle

在下面的示例中,Circle类具有一个构造函数__init__,它接受颜色和半径作为参数,并调用父类的构造函数来设置颜色。它还实现了基类中定义的areaperimeter方法,计算圆的面积和周长。

import math# 子类`Circle`表示一个圆形,它继承自基类`Shape`。
class Circle(Shape):def __init__(self, color, radius):super().__init__(color)self.radius = radiusdef area(self):return math.pi * self.radius**2def perimeter(self):return 2 * math.pi * self.radius

3.4 子类 Rectangle

在上面的示例中,Rectangle类具有一个构造函数__init__,它接受颜色、宽度和高度作为参数,并调用父类的构造函数来设置颜色。它还实现了基类中定义的areaperimeter方法,计算矩形的面积和周长。

# 子类`Rectangle`表示一个矩形,它也继承自基类`Shape`。
class Rectangle(Shape):def __init__(self, color, width, height):super().__init__(color)self.width = widthself.height = heightdef area(self):return self.width * self.heightdef perimeter(self):return 2 * (self.width + self.height)

3.5 使用图形类

现在我们可以创建CircleRectangle对象,并使用它们的属性和方法。

circle = Circle("red", 5)
print(circle.color)  # 输出: red
print(circle.radius)  # 输出: 5
print(circle.area())  # 输出: 78.53981633974483
print(circle.perimeter())  # 输出: 31.41592653589793rectangle = Rectangle("blue", 4, 6)
print(rectangle.color)  # 输出: blue
print(rectangle.width)  # 输出: 4
print(rectangle.height)  # 输出: 6
print(rectangle.area())  # 输出: 24
print(rectangle.perimeter())  # 输出: 20

在上面的示例中创建了一个红色半径为5的圆形对象circle,并打印了其颜色、半径、面积和周长。
还创建了一个蓝色宽度为4、高度为6的矩形对象rectangle,并打印了其颜色、宽度、高度、面积和周长

总结:上面示例中我们把对象的属性color和 area,perimeter方法封装在Shape基类中,基类Shape表示图形的抽象概念 。circle 和 rectangle 类通过继承并调用父类的属性和构造函数来设置颜色,同时还实现了基类中定义的area和perimeter方法。并且相同的方法名实现了不同的行为,这就是多态的思想实现

本文链接:https://my.lmcjl.com/post/10692.html

展开阅读全文

4 评论

留下您的评论.