Python 面向对象编程(OOP)从入门到精通

张开发
2026/4/12 0:59:22 15 分钟阅读

分享文章

Python 面向对象编程(OOP)从入门到精通
本章学习目标本章聚焦 Python 核心能力 ——面向对象编程 OOP帮助你从零基础打通类、对象、封装、继承、多态、魔术方法、属性装饰器、设计模式基础等全套知识点做到真正 “从入门到精通”。通过本章学习你将全面掌握OOP 核心思想、设计理念与适用场景类与对象的定义、实例化、属性与方法完整体系三大特性封装、继承、多态底层原理与实战写法构造函数、析构函数、__str__、__repr__等全套魔术方法实例属性、类属性、静态方法、类方法、实例方法区别与使用私有属性、保护属性、property装饰器实现安全访问单继承、多继承、MRO 方法解析顺序、super()深度用法面向对象实战案例学生管理系统、图书管理、日志工具类企业级 OOP 最佳实践、代码规范与常见坑面试高频 OOP 真题精讲含答案全文5000 字由浅入深、案例可直接运行适合零基础入门、进阶复习、面试突击。一、引言为什么 OOP 是 Python 工程师必备能力1.1 面向过程 vs 面向对象在学习 OOP 之前我们写代码大多是面向过程POP按步骤写逻辑变量和函数分散代码复用靠复制粘贴项目变大后极难维护。面向过程特点一步一步执行顺序执行逻辑数据和函数分离耦合度低但复用性差适合小脚本、简单逻辑项目变大后代码冗余、难以扩展、难以排查 Bug面向对象特点以 “对象” 为核心将数据和操作封装在一起代码模块化、可复用、可扩展、可维护适合中大型项目、框架开发、业务系统Django、Flask、Requests、Pandas 全部基于 OOP 构建Python 设计之初就是完全面向对象语言整数、字符串、列表、函数……一切皆对象。不会 OOP就无法真正读懂 Python 框架源码也无法写出工程化代码。1.2 OOP 能解决什么问题代码复用避免重复写相同逻辑数据安全通过封装保护内部属性不被外部随意修改结构清晰业务按类划分可读性极强易于扩展新增功能不改动原有代码开闭原则适合团队协作类与接口明确多人开发不冲突1.3 本章学习路线plaintext基础概念 → 类与对象 → 属性与方法 → 三大特性 → 魔术方法 → 高级特性 → 实战项目 → 面试题 → 最佳实践二、OOP 核心基础概念2.1 类Class与对象Object什么是类类是一个模板 / 图纸 / 抽象概念。比如“人” 是一个类它有姓名、年龄会吃饭、睡觉、工作。什么是对象对象是类的具体实例具体化。比如“张三”“李四” 是 “人类” 创建出来的对象。一句话总结类是抽象的对象是具体的类定义结构对象占用内存。2.2 OOP 三大核心特性必背封装将属性和方法打包隐藏内部实现对外提供接口继承子类复用父类功能减少重复代码多态不同对象对同一方法有不同实现提高灵活性2.3 基础术语一览实例化通过类创建对象的过程属性对象的特征变量姓名、年龄、价格方法对象的行为函数跑、吃、计算、保存self代表当前对象本身必须作为实例方法第一个参数__init__构造方法创建对象时自动调用魔术方法双下划线开头结尾的方法控制对象行为三、类与对象的定义与使用入门核心3.1 定义一个最简单的类语法python运行class 类名: # 属性 # 方法类名规范大驼峰命名法如Person、Student、Car、OrderService。示例定义人类python运行class Person: # 构造方法 def __init__(self, name, age): self.name name # 实例属性 self.age age # 实例方法 def introduce(self): return f大家好我是{self.name}今年{self.age}岁3.2 实例化对象python运行# 创建对象 实例化 p1 Person(张三, 20) p2 Person(李四, 22) # 调用方法 print(p1.introduce()) print(p2.introduce()) # 访问属性 print(p1.name) print(p2.age)执行结果plaintext大家好我是张三今年20岁 大家好我是李四今年22岁 张三 223.3 深入理解 selfself是 Python 自动传递的参数代表当前调用方法的对象。p1.introduce()→ 内部等价于introduce(p1)self就是对象本身谁调用self就是谁没有self方法无法访问对象内部属性。3.4 实例属性与实例方法实例属性self.xxx每个对象独立拥有互不影响实例方法必须带self只能通过对象调用四、属性与方法详解进阶核心4.1 实例属性、类属性、局部变量1实例属性python运行def __init__(self, name): self.name name # 实例属性每个对象独有互不干扰。2类属性类变量定义在类内部、方法外部所有对象共享。python运行class Person: species 人类 # 类属性 def __init__(self, name): self.name name调用python运行print(Person.species) p1 Person(张三) print(p1.species)3局部变量方法内部定义只能在方法内部使用。python运行def func(self): a 10 # 局部变量4.2 三种方法实例方法、类方法、静态方法1实例方法第一个参数self可访问实例属性、类属性只能对象调用python运行def introduce(self): pass2类方法 classmethod第一个参数cls代表类本身可访问类属性不能直接访问实例属性可通过类或对象调用python运行class Person: count 0 def __init__(self): Person.count 1 classmethod def get_count(cls): return cls.count3静态方法 staticmethod无默认参数self/cls不能访问实例属性与类属性相当于类里的普通函数python运行class Math: staticmethod def add(a, b): return a b print(Math.add(1,2))4.3 私有属性与封装Python 没有真正私有但有命名规范name公有属性_name保护属性约定不外部访问__name私有属性名称改写外部无法直接访问示例python运行class Student: def __init__(self, name, score): self.name name # 公开 self._gender 男 # 保护 self.__score score # 私有 def get_score(self): return self.__score s Student(小明, 95) print(s.name) print(s.get_score()) # print(s.__score) # 报错封装意义保护数据不被随意篡改。4.4 property 装饰器优雅访问私有属性让你像访问属性一样调用方法实现安全读写python运行class Student: def __init__(self, score): self.__score score property def score(self): return self.__score score.setter def score(self, value): if 0 value 100: self.__score value else: raise ValueError(分数必须0-100) s Student(80) print(s.score) s.score 90 # s.score 150 # 抛异常五、OOP 三大特性深度解析5.1 封装Encapsulation核心思想对外隐藏实现对内开放访问。好处数据安全降低耦合方便修改内部逻辑不影响外部提高代码可维护性典型写法私有属性存储数据提供get/set方法或property访问5.2 继承Inheritance子类自动拥有父类所有属性和方法可重写或扩展。单继承python运行# 父类 class Animal: def __init__(self, name): self.name name def shout(self): print(动物叫) # 子类 class Dog(Animal): def shout(self): # 方法重写 print(汪汪汪) dog Dog(旺财) dog.shout()多继承python运行class A: pass class B: pass class C(A, B): passsuper () 调用父类方法python运行class Student(Person): def __init__(self, name, age, score): super().__init__(name, age) self.score scoreMRO 方法解析顺序Python 使用C3 算法决定多继承调用顺序可通过类名.__mro__查看。5.3 多态Polymorphism不同对象对同一消息做出不同响应。Python 是鸭子类型不强制继承关系只要有同名方法即可实现多态。python运行class Dog: def speak(self): print(汪汪) class Cat: def speak(self): print(喵喵) def make_speak(animal): animal.speak() make_speak(Dog()) make_speak(Cat())优势统一接口灵活扩展。六、魔术方法大全精通必备魔术方法以__xxx__形式存在系统自动调用。6.1 构造与析构__init__(self)构造方法初始化对象__del__(self)析构方法对象销毁时执行6.2 字符串显示__str__(self)print()时显示给用户看__repr__(self)交互环境显示给开发者看python运行class Person: def __init__(self, name): self.name name def __str__(self): return fPerson:{self.name} p Person(张三) print(p)6.3 长度、容器、运算__len__支持len(obj)__getitem__支持下标obj[key]__add__支持__eq__支持__lt__支持6.4 属性访问控制__getattr__访问不存在属性时触发__setattr__设置属性时触发__delattr__删除属性时触发七、面向对象实战案例7.1 案例 1学生管理系统完整可运行python运行class Student: def __init__(self, sid, name, age, gender): self.sid sid self.name name self.age age self.gender gender def __str__(self): return f学号{self.sid} | 姓名{self.name} | 年龄{self.age} | 性别{self.gender} class StudentManager: def __init__(self): self.stu_list [] def add_student(self, student): self.stu_list.append(student) print(f添加成功{student.name}) def show_all(self): if not self.stu_list: print(暂无学生) return for stu in self.stu_list: print(stu) def find_by_name(self, name): res [s for s in self.stu_list if name in s.name] return res if __name__ __main__: manager StudentManager() manager.add_student(Student(101, 张三, 18, 男)) manager.add_student(Student(102, 李四, 19, 女)) manager.show_all()7.2 案例 2日志工具类python运行class Logger: staticmethod def info(msg): print(f[INFO] {msg}) staticmethod def error(msg): print(f[ERROR] {msg}) Logger.info(启动成功) Logger.error(连接失败)八、企业级 OOP 最佳实践类名使用大驼峰方法 / 变量使用下划线命名一个类只负责一件事单一职责原则尽量使用组合而非多层继承私有属性用__内部用_公开方法提供清晰注释数据类优先使用dataclass避免过度设计简单优先实例方法、类方法、静态方法合理区分九、面试高频 OOP 真题1. 谈一下面向对象三大特性封装、继承、多态解释 举例。2. self 作用是什么代表当前对象绑定实例属性访问对象自身成员。3.__init__作用初始化对象属性创建对象时自动调用。4. 类属性和实例属性区别类属性所有对象共享实例属性每个对象独立。5.staticmethod和classmethod区别静态方法无self/cls类方法有cls可访问类属性。6. 什么是多态Python 如何实现不同对象同名方法不同表现鸭子类型实现。7. 私有属性如何实现__attr通过property访问。8. 多继承 MRO 是什么方法解析顺序C3 算法__mro__查看。十、总结Python 面向对象编程是进入工程化开发的必经之路也是面试必考重点。从类的定义、实例化到属性方法、三大特性再到魔术方法与实战项目本章完整覆盖 OOP 所有核心知识点。学会 OOP你将能够读懂各类 Python 框架源码写出可复用、可维护的优质代码轻松应对企业笔试面试独立开发中小型业务系统建议多敲代码、多写案例从简单类开始逐步实现复杂系统真正做到从入门到精通。

更多文章