
很多新手写Python,长期只会写面向过程代码:一堆变量、函数、循环堆砌,代码杂乱无章,项目大了难以维护、复用、拓展。
真正的Python项目、爬虫框架、数据分析工具、后端开发,全部基于 面向对象编程(OOP) 开发。
面向对象是从“新手脚本代码”跨越到“工程级代码”的最重要分水岭。本篇零基础保姆教程,通俗讲解类、实例、三大特性、魔术方法,全程实战案例,看完彻底吃透OOP核心!
一、什么是面向对象?通俗理解
面向过程:聚焦步骤,从上到下一步步执行,适合简单小脚本。
面向对象:聚焦事物,把属性(数据)和方法(功能)封装成一个整体,模拟现实事物,代码可复用、易拓展、易维护。
核心概念
类(Class):模板、抽象概念(比如:人类、手机类、学生类)
实例(对象):根据模板创建的具体个体(张三、iPhone15)
属性:对象的特征(姓名、年龄、颜色)
方法:对象的行为(说话、跑步、拍照)
二、类与实例:零基础手写第一个类
语法格式
class 类名: # 属性 # 方法
规范:类名推荐大驼峰命名(首字母大写、无下划线)
实战案例:定义一个学生类
# 定义类(模板)class Student: # 类属性(公共属性,所有实例共享) school = "Python编程学院" # 自定义方法 def study(self): print("学生正在学习Python!")
# 创建实例(具体对象)stu1 = Student()
# 调用属性print(stu1.school)
# 调用方法stu1.study()
self详解:self代表当前实例本身,固定写法,所有类内方法第一个参数必须是self。
三、构造方法 __init__(最核心、最高频)
__init__ 是类的构造方法,创建实例时自动触发执行,专门用来初始化实例属性。
不用每次创建对象后手动赋值,一步初始化所有属性。
实战:初始化学生姓名、年龄、分数
class Student: # 构造方法:初始化实例属性 def __init__(self, name, age, score): self.name = name # 实例属性 self.age = age self.score = score
# 自定义方法 def show_info(self): print(f"姓名:{self.name},年龄:{self.age},分数:{self.score}")
# 创建实例并传参初始化stu1 = Student("小明", 20, 90)stu2 = Student("小红", 18, 95)
# 调用方法stu1.show_info()stu2.show_info()
重点区分
类属性:全局共享,所有实例通用
实例属性:每个对象独有,互不干扰
四、OOP三大核心特性(必考、项目必用)
面向对象三大精髓:封装、继承、多态
1、封装:隐藏细节、暴露接口
将属性和方法封装到类内部,隐藏内部复杂逻辑,只对外提供简单调用方式,提高代码安全性。
Python通过单下划线、双下划线实现私有属性:
_变量:受保护属性,外部不建议直接访问
__变量:私有属性,外部无法直接访问
封装实战
class User: def __init__(self, name, pwd): self.name = name self.__pwd = pwd # 私有属性,密码隐藏
# 提供公开方法获取私有数据 def check_pwd(self, input_pwd): return input_pwd == self.__pwd
user = User("admin", "123456")print(user.check_pwd("123456"))# print(user.__pwd) # 直接报错,无法访问私有属性
2、继承:代码复用、减少冗余
子类可以继承父类的所有属性和方法,无需重复编写代码,支持单继承、多继承。
语法:class 子类名(父类名)
继承实战
# 父类class Person: def __init__(self, name, age): self.name = name self.age = age
def introduce(self): print(f"我是{self.name},今年{self.age}岁")
# 子类继承父类class Student(Person): pass
stu = Student("小张", 21)stu.introduce() # 直接复用父类方法
3、多态:不同子类,同一方法不同表现
父类定义统一接口,子类重写方法,不同子类调用同一方法,呈现不同效果,适配多场景拓展。
多态实战
class Animal: def sound(self): pass
class Dog(Animal): def sound(self): print("汪汪汪")
class Cat(Animal): def sound(self): print("喵喵喵")
# 同一方法,不同表现Dog().sound()Cat().sound()
五、方法重写与super() 调用父类方法
子类可以重写父类原有方法,覆盖旧逻辑;同时可用 super() 保留父类逻辑并拓展新功能。
实战拓展
class Person: def __init__(self, name): self.name = name
def info(self): print(f"姓名:{self.name}")
class Student(Person): def __init__(self, name, score): super().__init__(name) # 调用父类构造方法 self.score = score
# 重写父类方法 def info(self): super().info() # 保留父类输出 print(f"分数:{self.score}")
stu = Student("小李", 88)stu.info()
六、高频魔术方法(内置双下划线方法)
魔术方法是Python内置的特殊方法,无需手动调用,特定场景自动触发,极大优化类的使用体验。
1、__str__ 打印对象自定义内容
不写__str__,打印对象只会输出内存地址,非常不友好。
class Student: def __init__(self, name): self.name = name
def __str__(self): return f"学生对象:{self.name}"
print(Student("小王"))
2、__del__ 对象销毁方法
对象被删除、程序结束时自动触发,适合释放资源、关闭链接。
3、__len__ 支持len()获取对象长度
4、__getitem__ 支持下标取值
七、新手高频踩坑总结
1、忘记self参数
类内所有自定义方法,第一个参数必须是self,省略直接报错。
2、混淆类属性与实例属性
公共数据放类属性,独有数据放实例属性,避免所有实例数据互相污染。
3、私有属性强行访问
双下划线私有属性是语法保护,不要强行绕过访问,通过公开方法操作数据更规范安全。
4、重写方法完全覆盖父类逻辑
需要保留父类功能时,务必使用super()调用父类方法,避免功能缺失。
文末结语
面向对象是Python工程化开发的基石,无论是爬虫、自动化、数据分析、后端开发,全部基于OOP思想构建。
掌握类与实例、封装继承多态、常用魔术方法,你就彻底告别“玩具代码”,写出规范、可复用、易维护的专业级代码。
以上就是“Python面向对象OOP保姆级教程:类与实例、封装继承多态、魔术方法,从脚本进阶工程化”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/14355/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料