Python 面向对象编程详解:从类与对象到动态属性方法

作者:会飞的拖把日期:2026/9/8

一、前言

在 Python 学习过程中,面向对象编程(Object Oriented Programming,简称 OOP)是一个非常重要的知识点。

Python 不仅支持面向过程编程,也支持面向对象编程。对于简单的小程序,我们可以使用函数快速完成任务;但是当项目规模扩大,代码越来越复杂时,面向对象思想能够帮助我们更好地组织代码,提高程序的复用性和维护性。

本文将详细介绍 Python 面向对象编程中的核心知识:

  • 什么是面向对象
  • 类和对象的关系
  • 如何创建类和对象
  • self 的作用
  • 属性和方法的区别
  • 类方法、静态方法
  • 动态添加属性和方法

二、面向过程 VS 面向对象

Python 是一种支持多种编程范式的语言,既可以采用面向过程,也可以采用面向对象方式开发。

1. 面向过程编程

面向过程(Procedural Programming)是一种以过程为核心的编程思想。

它关注:

完成一个任务需要哪些步骤,然后按照步骤执行。

例如:

实现“把大象装进冰箱”:

1def open_door():
2    print("打开冰箱门")
3
4
5def put_elephant():
6    print("把大象装进去")
7
8
9def close_door():
10    print("关闭冰箱门")
11
12
13open_door()
14put_elephant()
15close_door()
16

这种写法比较直观。

但是如果需求变复杂:

  • 不同品牌冰箱
  • 不同容量冰箱
  • 多个冰箱对象

代码会越来越混乱。


2. 面向对象编程

面向对象(Object Oriented Programming)关注的是:

程序中有哪些对象,以及对象之间如何交互。

例如:

冰箱就是一个对象。

我们可以定义一个冰箱类:

1class IceBox:
2
3    def __init__(self, brand):
4        self.brand = brand
5        self.door_open = False
6
7
8    def open_door(self):
9        self.door_open = True
10        print("冰箱门打开")
11
12
13    def put_elephant(self, food):
14        if self.door_open:
15            print(f"{food}放入冰箱")
16        else:
17            print("请先打开冰箱")
18
19
20    def close_door(self):
21        self.door_open = False
22        print("冰箱门关闭")
23
24
25box = IceBox("小米")
26
27box.open_door()
28box.put_elephant("大象")
29box.close_door()
30

相比面向过程:

  • 数据和操作进行了封装
  • 代码结构更加清晰
  • 更方便扩展

这就是面向对象中的重要思想:

封装


三、类和对象

类和对象是面向对象编程最核心的两个概念。

1. 类(Class)

类是对一类事物的抽象。

例如:

现实世界:

1学生
2

抽象成程序:

1class Student:
2    pass
3

类描述:

  • 对象有什么属性
  • 对象有什么行为

例如:

学生:

属性:

1姓名
2年龄
3学号
4

方法:

1学习
2考试
3休息
4

类就是创建对象的模板。


2. 对象(Object)

对象是类创建出来的具体实例。

例如:

类:

1学生
2

对象:

1张三
2李四
3王五
4

代码:

1class Student:
2    pass
3
4
5s1 = Student()
6s2 = Student()
7

这里:

Student

是类。

s1

s2

是对象。

对象具有:

  • 属性
  • 方法
  • 唯一标识

四、Python如何定义类

基本语法

1class 类名:
2
3    类体
4

例如:

1class Person:
2
3    pass
4

Python 中类名通常使用:

大驼峰命名法

例如:

1StudentInfo
2
3UserAccount
4
5CarFactory
6

五、init 初始化方法

__init__() 是 Python 中非常重要的方法。

作用:

创建对象后自动执行,用于初始化对象数据。

例如:

1class Person:
2
3    def __init__(self,name):
4
5        self.name = name
6
7
8p = Person("张三")
9
10print(p.name)
11

输出:

1张三
2

创建对象:

1Person("张三")
2

会自动执行:

1__init__()
2

六、self到底是什么?

很多 Python 初学者都会疑惑:

为什么方法里面必须写 self?

例如:

1class Person:
2
3    def eat(self):
4        print("吃饭")
5

这里:

self

代表:

当前对象本身

例如:

1p = Person()
2
3p.eat()
4

实际上等价于:

1Person.eat(p)
2

调用实例方法时,对象会自动作为第一个参数传入。


七、类属性和实例属性

Python 中属性分为:

  1. 类属性
  2. 实例属性

1. 类属性

类属性:

定义在类里面,方法外面。

例如:

1class Person:
2
3    country="China"
4

访问:

1print(Person.country)
2

所有对象共享。

例如:

1p1=Person()
2p2=Person()
3
4print(p1.country)
5print(p2.country)
6

输出:

1China
2China
3

2. 实例属性

实例属性属于对象自己。

通过:

1self.xxx
2

定义。

例如:

1class Person:
2
3    def __init__(self,name,age):
4
5        self.name=name
6        self.age=age
7

创建:

1p1=Person("张三",18)
2
3p2=Person("李四",20)
4

两个对象拥有不同的数据。


八、Python中的三种方法

Python 类中主要有:

  1. 实例方法
  2. 类方法
  3. 静态方法

1. 实例方法

特点:

  • 第一个参数是 self
  • 可以访问实例属性
1class Person:
2
3
4    def eat(self):
5
6        print("吃饭")
7
8
9p=Person()
10
11p.eat()
12

2. 类方法

使用:

1@classmethod
2

第一个参数:

1cls
2

示例:

1class Person:
2
3    country="China"
4
5
6    @classmethod
7    def show(cls):
8
9        print(cls.country)
10
11
12Person.show()
13

3. 静态方法

使用:

1@staticmethod
2

特点:

  • 不访问实例属性
  • 不访问类属性

例如工具函数:

1class Math:
2
3
4    @staticmethod
5    def add(a,b):
6
7        return a+b
8
9
10print(Math.add(1,2))
11

九、特殊方法(魔法方法)

Python 中:

双下划线开头和结尾的方法:

称为:

魔法方法

例如:

init

初始化对象

str

控制 print 输出

repr

控制解释器显示

del

对象销毁

例如:

1class Person:
2
3
4    def __str__(self):
5
6        return "Person对象"
7

十、动态添加属性和方法

Python 是动态语言。

对象创建后,也可以动态增加内容。


添加对象属性

1class Person:
2
3    pass
4
5
6p=Person()
7
8
9p.name="张三"
10
11print(p.name)
12

添加类属性

1Person.age=18
2

动态添加方法

需要使用:

1types.MethodType
2

例如:

1import types
2
3
4def eat(self):
5
6    print("吃饭")
7
8
9p.eat=types.MethodType(eat,p)
10
11
12p.eat()
13

十一、__slots__限制属性

默认情况下:

Python 对象可以随意添加属性。

例如:

1p.age=18
2
3p.height=180
4

但是有时候我们希望限制属性。

可以使用:

1__slots__
2

例如:

1class Person:
2
3    __slots__=("name","age")
4

这样:

允许:

1p.name="张三"
2
3p.age=18
4

禁止:

1p.weight=70
2

十二、总结

本文详细介绍了 Python 面向对象编程的重要知识:

知识点说明
对象的模板
对象类创建出来的实例
self当前对象本身
init初始化方法
类属性所有对象共享
实例属性对象独有
实例方法操作对象
类方法操作类
静态方法工具函数
魔法方法特殊行为控制
动态属性运行时添加
slots限制属性

掌握面向对象,是学习 Python 高级开发的重要基础。

后续学习:

  • 继承
  • 多态
  • 封装
  • 抽象类
  • 设计模式

都会建立在这些基础知识之上。


Python 面向对象编程详解:从类与对象到动态属性方法》 是转载文章,点击查看原文


相关推荐


K8S接入NFS存储
避凉闲庭2026/8/31

一、部署NFS服务端 安装NFS服务 Ubuntu/Debian sudo apt update sudo apt install nfs-kernel-server -y Centos/RHEL / Rocky / AlmaLinux sudo dnf install -y nfs-utils 创建共享目录 sudo mkdir -p 路径及目录名 配置NFS配置文件 sudo vim /etc/exports 增加以下内容 /opt/nfs x.x.x.x/xx(r


node.js
zzx2006__2026/8/23

01_Node.js入门 什么是 Node.js Node.js 是一个独立的 JavaScript 运行环境,能独立执行 JS 代码,因为这个特点,它可以用来编写服务器后端的应用程序Node.js 作用除了编写后端应用程序,也可以对前端代码进行压缩,转译,整合等等,提高前端开发和运行效率Node.js 基于Chrome V8 引擎封装,独立执行 JS 代码,但是语法和浏览器环境的 V8 有所不同,没有 document 和 window 但是都支持 ECMAScript 标准的代码语法Node


Nginx外置缓存-redis2-nginx-module
難釋懷2026/8/10

一、引言:当Lua成为瓶颈,回归C层的必然选择 在《Nginx外置缓存》系列中,我们反复强调OpenResty + lua-resty-redis是生产环境对接Redis的首选方案。这个判断在95%的场景下成立,但剩下的5%恰恰是最极端的性能场景: API网关层纯透传缓存:无需任何业务逻辑,仅需GET/SET+TTL,LuaJIT的协程调度开销占比超过30%;超高频计数器/限流:QPS > 50万,每次请求仅执行INCRBY,Lua层的函数调用和GC压力成为天花板;嵌入式/Nginx精简部署


Go语言第四章(类型转换)
小满zs2026/8/1

类型转换 实际开发里,不同类型之间经常需要互相转换:字符串转数字、数字转字符串、浮点数转整数、整数转浮点数,等等。 数字的转换 比如有一个浮点数 3.1415926535,想把它变成整数,可以用 int() 来转换: package main import "fmt" func main() { num := 3.1415926535 intNum := int(num) fmt.Println(intNum) // 3 } 可以看到,int() 会把浮点数转成整数,并直接舍去小数部分


Python生成器与惰性求值:从yield说起的一场"暂停魔法"
卷无止境2026/7/24

写Python代码写到一定阶段,几乎所有人都会碰到一个绕不过去的坑——处理大数据集的时候,list看着简单顺手,用着用着内存就爆了。这时候有人会甩给你一句话,"用生成器啊"。但生成器到底是什么,yield凭什么能让函数中途停下来又重新跑起来,这背后藏着的其实是Python运行时一套相当精巧的机制。下面就把这套机制拆开揉碎,一步步讲清楚。 🔍 生成器到底是什么 普通函数被调用时,Python会立刻执行函数体,跑到return或者函数末尾就结束,栈帧被销毁,一切归零。生成器函数长得跟普通函数几乎


V040:RAG 检索增强生成的工程链路解构与生产级系统设计
胡萝卜术2026/7/16

V040:RAG 检索增强生成的工程链路解构与生产级系统设计 摘要:本文从工程视角系统解构 RAG(Retrieval-Augmented Generation)的完整技术链路,涵盖文档工程、向量检索原理、相似度评分机制、元数据架构、上下文窗口管理、生产级组件选型及高级检索模式。文章以可观测的中间结果为导向,建立从原型验证到生产部署的技术决策框架,并配套面试应答策略。 引言:RAG 认知的三个层次 对 RAG(Retrieval-Augmented Generation)的理解可分为三个递


AI推理成本降本的三条技术路径:从OpenAI自研芯片到MoE架构的工程化分析
小K讲AI营销2026/7/7

摘要 2026年,AI推理成本已成为制约大模型商业化的核心瓶颈。OpenAI联合博通推出推理专用芯片Jalapeño,推理成本降低50%;DeepSeek通过MoE架构将推理价格压至6元/百万Token,与Claude的181元形成30倍差距。本文从工程化视角分析当前AI推理降本的三条主要技术路径:专用芯片、模型架构优化、系统级调度,并结合实际数据探讨各路径的可行性与局限。 一、推理成本已成为商业化的核心瓶颈 2026年,全球AI算力支出达到500亿美元(数据来源:钛媒体/布罗克森国会证词


MinerU 3.4.0 PDF/文档转 Markdown/Word软件免安装一键启动整合包
2501_946908082026/6/29

一、软件简介 本软件基于 MinerU 3.4.0 开源文档解析引擎,提供了一套开箱即用的图形化文档转换工具。它能够将 PDF、图片、Office 文档(DOCX/PPTX/XLSX)等内容精准地转换为 Markdown 文本或 Word 文档,同时保留原始文档的版面结构和排版信息。下载解压后一键启动即可使用。 二、主要功能特点 1. 多格式输入支持 文件类型格式PDF.pdf图片.jpg, .jpeg, .png, .gif, .webp, .svg, .bmp, .tiff,


蓝速科技 AI 数字人部署与交互实战指南
蓝速科技2026/6/20

在酒店大堂或企业展厅部署 AI 数字人时,最让人头疼的往往不是硬件安装,而是最终呈现效果“假”。很多项目落地后,数字人嘴巴乱动、声音和画面对不上,甚至只是循环播放预制视频,完全无法应对现场客人的随机提问。这种“玩具级”的交互体验,不仅无法提升品牌形象,反而会让访客感到尴尬,直接拉低服务质感。 造成这种现象的核心原因,通常在于硬件算力不足导致渲染掉帧,或是算法配置未能开启实时唇形同步功能。要解决这些问题,不能仅靠堆砌参数,而需要从选型策略、环境搭建到核心算法调优的全链路精细化操作。只有确保每一帧画


muduo库 --socket的封装
爱装代码的小瓶子2026/6/12

本系列主要旨在帮助初学者学习和巩固 Linux 高性能网络编程,同时记录笔者在学习与手写 muduo 网络库项目过程中的心得体会。 本系列会围绕 muduo 网络库的核心思想展开,包括 Reactor 模式、事件循环、Channel、Poller、TcpServer、TcpConnection、Buffer、线程池等内容。 个人主页: 爱装代码的小瓶子 文章系列: Linux 2. C++ 3. muduo 网络

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读