Python--面向对象

面向对象⭐⭐

1. 面向对象和面向过程思想

面向对象 和面向过程都是一种编程思想,就是解决问题的思路

  • 面向过程:POP(Procedure Oriented Programming)面向过程语言代表是c语言
  • 面向对象:OOP(Object Oriented Programming)常见的面向对象语言包括:java c++ go python koltin

通过面向对象的方式,我们不再关注具体的步骤,而是将问题抽象为对象和它们之间的交互。我们可以直接调用对象的方法来实现功能,而无需显式指定每个步骤。

面向过程强调按照步骤 执行操作,而面向对象强调通过定义和操作对象来解决问题。

在面向对象的编程中,我们将问题抽象为对象的集合,这些对象具有属性和行为,并通过对象之间的交互来实现功能。这种抽象和交互的方式使得面向对象编程更加灵活、可维护和可扩展。

接下来我们看同一个问题,面向过程和面向对象是怎么解决的?

1.1. 面向过程编程的贪吃蛇游戏

在面向过程编程中,贪吃蛇游戏可能会以以下方式实现:

  1. 定义蛇的初始位置、长度、方向等变量。
  2. 创建一个表示游戏区域的二维数组。
  3. 在游戏循环中,根据用户输入改变蛇的方向。
  4. 更新蛇的位置,根据当前方向向前移动一格。
  5. 检查蛇是否吃到食物,如果是,则增加蛇的长度。
  6. 检查蛇是否撞到边界或自己的身体,如果是,则游戏结束。
  7. 在游戏区域中绘制蛇和食物。
  8. 循环回到第3步,直到游戏结束。

在面向过程的编程中,游戏的各个方面被划分为一系列的步骤和变量,通过按照特定顺序执行这些步骤来控制游戏的逻辑和状态。

1.2. 面向对象编程的贪吃蛇游戏

现在,让我们看看如何使用面向对象编程来实现贪吃蛇游戏。

  1. 创建一个Snake类,具有属性(例如位置、颜色、长度、方向)和方法(例如移动、吃食物)。
  2. 创建一个Food类,具有属性(例如位置、颜色)。
  3. 创建一个Game类,它包含一个或多个蛇对象和一个或多个食物对象,以及游戏区域等属性。Game类还具有控制游戏逻辑的方法,例如更新游戏状态和绘制游戏界面。
  4. 在游戏循环中,通过调用Game类的方法来控制游戏的进行,例如根据用户输入改变蛇的方向,更新蛇的位置,检查碰撞等。
  5. 在游戏界面中,通过调用绘图方法来绘制蛇和食物。

在面向对象编程中,贪吃蛇游戏被视为一组对象的交互。各个对象封装了游戏的状态和行为,并通过对象之间的消息传递来实现功能。这种对【对象Object】的抽象和交互使得游戏逻辑更清晰、可维护性更高,并且可以轻松地扩展和修改游戏的功能。

一切皆对象!

1.3. 面向对象的总结

  • 面向对象,强调的是对象(实体)
  • 面向对象是一种思想,更加符合人的思维习惯
  • 面向对象使复杂的问题简单化了
  • 面向对象的出现,让曾经在过程的执行者 ,变成了对象的指挥者

2. 类和对象

类和对象是面向对象非常重要的概念

  • 类是描述了一种类型(相当于图纸)
  • 对象是这个类型的具体实现(相当于图纸具体实现)

思考:

旺财和狗,哪个是类,哪个是对象?

答案:

狗是一个类型,属于类

旺财是狗的实现,属于对象

类和对象的关系

类就是制造图纸,只有一个。对象是类的实体,会产生多个

定义类和创建对象

类的定义格式:

复制代码
class 类名:
    pass

创建对象

复制代码
对象名 = 类名()

代码演示:

复制代码
# 定义类
class Person:
    pass
# 创建对象
p1 = Person()

3. 类的组成

类可以描述世间万物,类都需要有类名,也应该具备一些属性 和行为

  • 类的关键字:class
  • 类的名称:类名
  • 类的属性:一组数据
  • 类的方法:允许进行操作的方法(行为)

人(Person)类应该具备什么属性和行为呢?

  • 属性:姓名(name) 、年纪(age)
  • 方法:吃(eat)、跑(run)、说话(say)

3.1. 成员属性

成员属性的定义需要在初始化方法__init__方法下定义

格式:

复制代码
def __init__(self):
	self.属性 = 属性值

举例:

复制代码
class Person:
    def __init__(self, name, age):
        # 成员属性
        self.name = name
        self.age = age
        
# 创建对象
p = Person('张三', 30)
# 访问成员属性
print(p.name)
print(p.age)

在创建对象时,属性值可以由外部传进来,也可以在初始化方法里设置为任意值

3.2. 成员方法

成员方法的定义格式为 def 函数名(self):

复制代码
class Person:
    
    # 定义成员方法 say_hello
    def say_hello(self):
        print('hello')
        
	# 定义成员方法run
    def run(self):
        print('跑')

# 创建对象
p = Person()
# 调用成员方法
p.say_hello()

注意:

成员方法都会默认有参数self,调用的时候不需要传递self

相关推荐
云和数据.ChenGuang8 分钟前
Python 常见特殊方法详解:__new__、__init__、__del__、__str__、__repr__ 与 __getattribute__
开发语言·人工智能·python·1024程序员节
xyouyuweizhu29 分钟前
字节流与字符流:Java IO 的两条主线该怎么选
java·开发语言·python
迪菲赫尔曼32 分钟前
【基础篇 04】第一次使用终端:命令在哪里输入,电脑现在又“站”在哪里?
python·yolo·目标检测
qianbo_insist1 小时前
# 在 Qwen3.5-2B 上把 GDN-1 无损换成 GDN-2:一次完整的架构手术实验(负结果)
人工智能·pytorch·python·架构
多弗朗皮卡丘1 小时前
C++的IO流
开发语言·c++·io流·文件io流
骑着蜗牛撵大象3271 小时前
AI Agent 工程化开发实战(三):用 StateGraph 给智能体搭一条可回放的状态流水线
java·开发语言·jvm·ai·状态管理·langgraph·stategraph
itmigrate2 小时前
Rust 里的所有权误区:不是不写 clone 就叫高性能
开发语言·后端·rust
Brilliantwxx2 小时前
【Linux】 文件访问与路径解析:目录、文件名、dentry、路径缓冲与 dcache 全解析
linux·运维·服务器·开发语言·spring
摇滚侠2 小时前
《On Java 中文版 基础卷》阅读笔记 初始化和清理 08
java·开发语言·笔记
xiangyun612 小时前
C++ 手撕 shared_ptr:引用计数与控制块到底长什么样?
开发语言·c++·算法·面试·stl