news 2026/4/18 14:40:01

零基础学AI人工智能:6.1 python进阶之面向对象

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
零基础学AI人工智能:6.1 python进阶之面向对象

在前面的Python基础语法系列中,我们已经完整掌握了变量、数据类型、流程控制、容器类型等核心基础,能够编写简单的脚本和数据处理程序。

而在真实的AI开发场景中,我们需要管理复杂的模型、数据集、训练流程和工具函数,单纯的面向过程编程会导致代码冗余、维护困难、复用性差。面向对象编程正是解决这些问题的核心思想,它将数据和操作数据的方法封装在一起,以“对象”为单位组织代码,是Python进阶的必经之路,也是编写大型AI项目、开源框架的基础。

今天是Python进阶的第一篇,我们将系统讲解面向对象编程的核心概念、三大特征、基础格式与特殊写法,全程无代码,仅从底层逻辑和使用场景出发,帮大家建立面向对象的编程思维。

一、面向对象的核心概述

1.1什么是面向对象

面向对象是一种编程思想,它以“对象”为基础来组织和编写程序,将数据和操作数据的方法封装在一起,把整个程序看作是由多个相互协作的对象组成的集合。

这种编程思想有三个核心特点:

  1. 更符合人类的思考习惯,将现实世界中的事物抽象为程序中的对象;
  2. 把复杂的程序管理简单化,将大问题拆解为多个小对象分别处理;
  3. 把人从代码的执行者变成指挥者,通过调用对象的方法完成任务。

1.2面向对象的三大特征

面向对象编程有三大核心特征,是其区别于面向过程编程的关键:

  1. 封装:隐藏对象的内部细节,只对外提供统一的访问接口;
  2. 继承:子类可以继承父类的属性和方法,实现代码的复用;
  3. 多态:同一个方法在不同的对象上可以有不同的实现,提高代码的灵活性。

1.3面向对象的核心概念

面向对象中有两个最基础、最核心的概念:

  1. 类:是对象的模板,描述了一类对象共同的属性和行为。比如“学生”是一个类,它描述了所有学生都有的姓名、年龄等属性,以及学习、考试等行为。
  2. 对象:是类的实例,是类的具体体现。比如“张三”是“学生”类的一个具体对象,拥有自己的姓名、年龄等具体属性值。
  3. 除此之外,还有两个衍生概念:
  4. 属性:描述事物的外在特征,是抽象的概念,看不见摸不着。比如学生的姓名、年龄都是属性。
  5. 方法:描述事物的行为,是事物能够做的事情。比如学生的学习、吃饭都是方法。

二、面向对象三大特征详解

2.1封装

封装是面向对象的基础,其核心思想是隐藏对象的属性和实现细节,仅对外提供一个公共的访问方式。

封装有三个核心好处:

  1. 简化代码的使用,使用者无需了解内部实现细节,只需调用公共接口即可;
  2. 提高代码的安全性,防止外部随意修改对象的内部数据;
  3. 提高代码的复用性,封装好的方法可以被多个对象重复调用。

封装的实现方式分为两步:

  1. 将对象的属性私有化,使其只能在类的内部被访问;
  2. 提供公共的访问方法,外部通过这些方法来获取或修改属性的值。

封装有一个核心特点:私有化的属性只能在类的内部被直接访问,外部必须通过类提供的公共接口才能访问。

2.2继承

继承是实现代码复用的核心手段,其核心思想是子类可以继承父类的所有属性和方法,同时也可以根据自己的需求添加新的属性和方法,或者重写父类已有的方法。

继承有两个核心好处:

  1. 大幅提高代码的复用性,避免重复编写相同的代码;
  2. 增强了代码的耦合性,使得开发和维护的效率大幅提升。

继承的实现方式是在定义子类时,指定要继承的父类。子类继承父类后,可以直接使用父类中所有非私有化的属性和方法。

继承有以下几个核心特点:

  1. 子类可以拥有自己独有的属性和方法,实现功能的扩展;
  2. 子类可以重写父类的方法,即定义一个和父类方法名相同的方法,调用时会优先执行子类的方法;
  3. Python支持多继承,即一个子类可以同时继承多个父类。

在多继承场景中,有一个重要的概念是方法解析顺序(MRO),它规定了当多个父类有同名方法时,子类调用方法的顺序,遵循从左到右的查找规则。

如果子类在重写父类方法后,还需要调用父类的原方法,可以使用super方法来实现。

2.3多态

多态是面向对象的高级特征,其核心思想是同一个事物在不同的场景中可以表现出不同的形态。在程序中,多态体现为父类的引用可以指向子类的对象,调用同一个方法时,会根据对象的实际类型执行不同的实现。

多态有三个核心好处:

  1. 增强了代码的灵活性,同一个接口可以适配不同的对象;
  2. 提高了代码的扩展性,新增子类时无需修改原有代码;
  3. 父类的引用可以作为函数的参数传递,这样可以接收任意的子类对象。

多态也有一个弊端:父类的引用无法直接访问子类中独有的属性和方法。

实现多态需要满足三个前提条件:

  1. 要有继承关系,即存在父类和子类;
  2. 要有方法重写,即子类重写了父类的方法;
  3. 要有父类引用指向子类对象。

在多态的基础上,还有一个重要的概念是抽象类:

  1. 没有方法体的方法叫做抽象方法;
  2. 包含抽象方法的类叫做抽象类;
  3. 抽象类不能被实例化,只能作为父类被继承;
  4. 抽象类的作用是充当父类,规定子类必须实现的方法规范,具体的实现由子类来完成。

三、面向对象的格式相关

3.1类的定义格式

定义类需要使用特定的关键字,类名遵循大驼峰命名法,即每个单词的首字母都大写,其余字母小写。类的内部包含属性和方法两部分。

3.2如何访问类中的成员

访问类中的属性和方法需要分为两步:

  1. 创建类的对象,即类的实例;
  2. 通过对象来访问类的属性和方法。

3.3如何定义和访问属性

属性的定义位置在类的内部、方法的外部。访问属性的方式是通过对象名加上属性名来访问。

3.4 self关键字

self是面向对象中非常重要的一个关键字,它代表当前正在调用方法的对象。哪个对象调用了方法,方法内部的self就代表哪个对象。

self的核心作用是在方法的内部访问对象的属性和其他方法。

3.5魔法方法

魔法方法是Python中一类特殊的方法,它们有两个核心特点:

  1. 命名格式固定,以双下划线开头和结尾;
  2. 无需手动调用,在特定的场景下会自动触发执行。

常用的魔法方法有三种:

  1. 初始化方法:在创建对象的时候自动触发,用于给对象的属性赋初始值;
  2. 析构方法:在对象被销毁的时候自动触发,用于释放资源;
  3. 字符串方法:在打印对象的时候自动触发,用于返回对象的字符串描述。

四、面向对象的几种特殊写法

4.1对象属性

对象属性是定义在对象方法内部的属性,它只属于当前对象,不同对象之间的对象属性互不影响。访问对象属性的方式是通过对象名加上属性名来访问。

4.2类属性

类属性是定义在类的内部、方法的外部的属性,它属于整个类,被所有的对象共享。访问类属性的推荐方式是通过类名加上属性名来访问。

4.3类方法

类方法是属于类的方法,它需要使用特定的装饰器来修饰。类方法的第一个参数是cls,代表当前的类。

类方法的应用场景是:函数内部不使用self,但需要使用类的时候。

4.4静态方法

静态方法是一种普通的函数,它需要使用特定的装饰器来修饰。静态方法的参数中不需要写self和cls。

静态方法的应用场景是:函数内部既不使用self,也不使用cls的时候。

五、逻辑图

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 14:39:30

MelonLoader终极指南:Unity游戏模组加载器完整使用教程

MelonLoader终极指南:Unity游戏模组加载器完整使用教程 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 想在Unity游…

作者头像 李华
网站建设 2026/4/18 14:39:25

从 ( y = wx + b ) 到神经网络:参数、loss、梯度到底怎么连起来(一)

很多人一开始学深度学习,最容易卡住的不是代码,而是这些词:模型参数loss梯度反向传播参数更新这些词单独看都好像认识,但一连起来就会发虚。 尤其是刚接触 YOLO 的时候,经常会看到:模型在训练loss 在下降梯…

作者头像 李华
网站建设 2026/4/18 14:37:22

探索数字世界的桥梁:用Ryujinx在PC上开启Switch游戏之旅

探索数字世界的桥梁:用Ryujinx在PC上开启Switch游戏之旅 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想象一下,你坐在电脑前,却能在熟悉的Window…

作者头像 李华
网站建设 2026/4/18 14:37:01

指针初探:从NULL到未初始化

在C语言编程中,指针的使用是一个常见但也容易出错的领域。今天我们来探讨两个常见的问题:NULL指针和未初始化的指针。特别是,我们将讨论它们在内存中的表现,以及它们如何可能发生交互。 NULL指针 在C语言中,NULL指针通常被定义为一个指向内存地址0的指针。值得注意的是,…

作者头像 李华
网站建设 2026/4/18 14:36:12

3个关键步骤:用PyBullet构建专业级无人机强化学习环境

3个关键步骤:用PyBullet构建专业级无人机强化学习环境 【免费下载链接】gym-pybullet-drones PyBullet Gymnasium environments for single and multi-agent reinforcement learning of quadcopter control 项目地址: https://gitcode.com/gh_mirrors/gy/gym-pybu…

作者头像 李华
网站建设 2026/4/18 14:36:03

探索ChemCrow:当化学研究遇上AI智能助手

探索ChemCrow:当化学研究遇上AI智能助手 【免费下载链接】chemcrow-public Chemcrow 项目地址: https://gitcode.com/gh_mirrors/ch/chemcrow-public 你是否曾为繁琐的化学分析任务感到困扰?从分子结构验证到反应预测,传统方法往往需要…

作者头像 李华