Python 面向对象编程(OOP)零基础全教程

简介: 本教程来源:http://dnuhf.cn深入浅出讲解Python面向对象编程(OOP):从类与对象的本质区别(模板vs实例),到属性、方法、构造函数`__init__`;涵盖封装(私有属性)、继承(代码复用)、多态(统一接口不同实现)三大特性,以及类方法、静态方法等核心概念,配大量生活化示例和可运行代码,零基础也能轻松掌握。

在 Python 里,你之前学的变量、列表、字典,都属于数据;函数属于行为。而对象(Object) 就是把数据 + 行为打包在一起的东西。

面向对象编程(OOP)是现代编程最重要的思想之一,它让代码更清晰、更好复用、更容易维护。不管是做游戏、网站、数据分析还是自动化,都离不开对象。

这篇教程从最基础讲起,不讲复杂术语,让你真正学会 Python 类、对象、属性、方法、继承、封装。


一、什么是对象?什么是类?

1. 直观理解

  • 类(Class):相当于设计图纸 / 模板。比如 “学生”“手机”“汽车” 是一类东西。
  • 对象(Object):根据图纸造出来的具体实例。比如 “张三同学”“你的手机”“楼下那辆特斯拉”。

一句话:

类是模板,对象是根据模板造出来的具体东西。

2. 生活中的例子

  • 类:手机
  • 属性:品牌、颜色、内存
  • 方法:打电话、发微信、拍照
  • 对象:你的手机
  • 品牌 = 华为
  • 颜色 = 白色
  • 可以执行打电话 ()

3. 程序里的结构

plaintext

类(Class)
├── 属性(变量):存储数据
└── 方法(函数):执行操作

二、定义一个最简单的类

class 关键字定义类,类名一般用大驼峰(每个单词首字母大写)。

python

运行

class Student:
    pass

pass 表示空类,什么都不做。

然后根据这个类创建对象(实例化):

python

运行

# 创建对象 s1
s1 = Student()
# 创建对象 s2
s2 = Student()
print(s1)
print(s2)

你会发现 s1 和 s2 是两个不同的对象,互不干扰。


三、构造方法 __init__:给对象初始化数据

创建对象时自动执行的方法叫构造方法,固定名字:__init__(前后两个下划线)。

它的作用是:给对象设置初始属性

python

运行

class Student:
    # 构造方法
    def __init__(self, name, age, grade):
        # self 代表当前对象自己
        self.name = name    # 属性:姓名
        self.age = age      # 属性:年龄
        self.grade = grade  # 属性:年级

重点:self 是什么?

  • self 必须写在方法的第一个参数
  • 它代表当前这个对象自己
  • 每个对象调用方法时,self 自动传进去,不用你管

创建带属性的对象

python

运行

s1 = Student("张三", 16, "高一")
s2 = Student("李四", 15, "高一")
print(s1.name)   # 张三
print(s1.age)    # 16
print(s2.grade)  # 高一

每个对象都有独立的属性,互不影响。


四、在类里写方法(对象的行为)

方法就是类里面的函数,表示对象能做什么。

python

运行

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    # 方法1:介绍自己
    def introduce(self):
        print(f"我叫{self.name},今年{self.age}岁")
    # 方法2:学习
    def study(self, subject):
        print(f"{self.name}正在学习{subject}")

使用:

python

运行

s = Student("小明", 14)
s.introduce()
s.study("数学")

输出:

plaintext

我叫小明,今年14岁
小明正在学习数学

这就是数据 + 行为打包成对象。


五、修改、访问、删除对象属性

1. 访问属性

python

运行

print(s.name)
print(s.age)

2. 修改属性

python

运行

s.age = 15
s.name = "大明"

3. 动态添加属性

Python 非常灵活,可以随时给对象加属性:

python

运行

s.score = 90
print(s.score)

4. 删除属性

python

运行

del s.score

5. 判断是否有属性

python

运行

print(hasattr(s, "name"))   # True
print(hasattr(s, "score"))  # False

六、三大特性之一:封装

封装 = 把数据保护起来,不让外部随便改

比如学生的分数不能随便改成 100,必须通过正规方法修改。

Python 用下划线约定表示私有:

  • _xxx:保护属性(约定不建议外部访问)
  • __xxx:私有属性(外部很难直接访问)

示例:

python

运行

class Student:
    def __init__(self, name):
        self.name = name
        self.__score = 0  # 私有属性
    # 提供方法设置分数
    def set_score(self, score):
        if 0 <= score <= 100:
            self.__score = score
        else:
            print("分数无效")
    def get_score(self):
        return self.__score

使用:

python

运行

s = Student("小红")
s.set_score(88)
print(s.get_score())   # 88
s.set_score(150)       # 分数无效

好处:

  • 外部不能随便乱改
  • 可以加验证逻辑
  • 代码更安全、更规范

七、三大特性之二:继承

继承 = 子类复用父类的功能,并扩展新功能。

比如:

  • 父类:人类(Person)
  • 属性:姓名、年龄
  • 方法:说话、吃饭
  • 子类:学生(Student)继承人类
  • 额外属性:学号
  • 额外方法:学习

语法:

python

运行

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def say(self):
        print(f"我是{self.name}")
# Student 继承 Person
class Student(Person):
    def __init__(self, name, age, student_id):
        # 调用父类构造方法
        super().__init__(name, age)
        self.student_id = student_id  # 子类自己的属性
    def study(self):
        print(f"{self.name}学习中")

使用:

python

运行

s = Student("小明", 15, "S1001")
s.say()     # 继承自父类
s.study()   # 子类自己的

继承的好处:

  • 代码不用重复写
  • 结构清晰
  • 方便扩展

八、三大特性之三:多态

多态就是:同一个方法名,不同子类可以有不同实现

示例:

python

运行

class Animal:
    def speak(self):
        pass
class Dog(Animal):
    def speak(self):
        print("汪汪汪")
class Cat(Animal):
    def speak(self):
        print("喵喵喵")

统一调用:

python

运行

def make_sound(animal):
    animal.speak()
dog = Dog()
cat = Cat()
make_sound(dog)   # 汪汪汪
make_sound(cat)   # 喵喵喵

这就是多态:同样调用 speak(),表现不同。


九、常用内置方法(魔术方法)

__xx__ 命名的方法叫魔术方法,系统自动调用。

1. __str__:打印对象时显示内容

python

运行

class Student:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return f"学生:{self.name}"
s = Student("小明")
print(s)   # 学生:小明

2. __len__:让对象可以用 len ()

python

运行

class Classroom:
    def __init__(self):
        self.students = []
    def add(self, s):
        self.students.append(s)
    def __len__(self):
        return len(self.students)
c = Classroom()
c.add("小明")
c.add("小红")
print(len(c))  # 2

3. __del__:对象销毁时调用

python

运行

def __del__(self):
    print("对象被销毁了")

十、类属性、实例属性、类方法、静态方法

1. 实例属性

每个对象自己的:self.name

2. 类属性

所有对象共享:

python

运行

class Student:
    school = "第一中学"   # 类属性
s1 = Student()
s2 = Student()
print(s1.school)   # 第一中学
print(s2.school)

3. 类方法 @classmethod

操作类属性:

python

运行

@classmethod
def set_school(cls, name):
    cls.school = name

4. 静态方法 @staticmethod

和对象无关,只是放在类里的工具函数:

python

运行

@staticmethod
def add(a, b):
    return a + b

十一、面向对象的优点总结

  1. 代码复用:继承避免重复
  2. 结构清晰:数据和行为打包
  3. 易于扩展:加功能不影响原有代码
  4. 安全可控:封装保护数据
  5. 符合现实逻辑:人、车、手机、学生都能直接映射成对象

十二、完整综合示例

python

运行

class Phone:
    def __init__(self, brand, color):
        self.brand = brand
        self.color = color
    def call(self, name):
        print(f"{self.color}的{self.brand}手机给{name}打电话")
class SmartPhone(Phone):
    def __init__(self, brand, color, system):
        super().__init__(brand, color)
        self.system = system
    def play_game(self):
        print(f"{self.brand}手机玩游戏,系统是{self.system}")
p = SmartPhone("iPhone", "白色", "iOS")
p.call("妈妈")
p.play_game()

输出:

plaintext

白色的iPhone手机给妈妈打电话
iPhone手机玩游戏,系统是iOS

十三、新手常见误区

  1. 忘记写 self
    方法第一个参数必须是 self,否则报错。
  2. 把类当对象直接用
    python

    运行



Student.name    # 错
s = Student()
s.name          # 对
  1. 以为继承会自动调用父类 init
    必须写 super().__init__(...)
  2. 随便修改私有属性
    虽然 Python 不强制禁止,但规范上不要直接改 __xxx

总结(极简版)

  • 类(Class):模板
  • 对象(Object):具体实例
  • 属性:变量,存储数据
  • 方法:函数,行为
  • 封装:保护数据,提供接口
  • 继承:代码复用
  • 多态:同一方法不同表现

学会这些,你已经掌握 Python 面向对象 90% 的常用内容,可以看懂绝大多数项目代码。

来源:http://www.dnuhf.cn

相关文章
|
5月前
|
网络协议 安全 Ubuntu
Linux中的ARP包过滤利器(手把手教你使用arptables命令)
本文介绍Linux下的ARP防火墙工具arptables,涵盖其安装、基本语法、实战应用及规则持久化方法。通过arptables可有效防范ARP欺骗攻击,提升局域网安全性,适合网络初学者快速上手,助力构建更安全的内网环境。
|
5月前
|
运维 监控 网络协议
Linux网络带宽优化配置(小白也能看懂的实战指南)
本文介绍如何通过调整系统内核参数优化Linux网络性能,涵盖TCP缓冲区、连接队列等关键设置,提升带宽利用率与传输效率,适用于高并发与低延迟场景的网络调优实践。
|
5月前
|
负载均衡 监控 算法
Nginx负载均衡优化(从零开始搭建高性能Web服务)
本教程详解Nginx负载均衡配置,从安装到优化,涵盖反向代理、多种负载策略(轮询、加权轮询、IP Hash等)、健康检查与性能调优,助你构建高可用、高性能的Web架构,小白也能快速上手。
|
5月前
|
存储 安全 Shell
Linux Shell变量删除(从零开始掌握变量清理技巧)
本文介绍如何在Linux Shell中删除变量,涵盖普通变量、环境变量及批量删除方法,强调使用`unset`命令管理变量生命周期,提升脚本安全与健壮性,适用于Shell脚本开发与系统管理。
|
5月前
|
Shell Linux 测试技术
Linux Shell循环详解(从零开始掌握Shell脚本中的循环结构)
本文介绍Linux Shell脚本中for和while循环的基本语法与应用,帮助新手掌握自动化任务处理技巧,提升脚本编写效率。
|
5月前
|
运维 安全 Ubuntu
掌控磁盘空间的艺术(Linux文件系统配额完全入门指南)
本文介绍Linux文件系统配额(Quota)的配置与管理,帮助管理员限制用户磁盘空间和文件数量,防止资源滥用。涵盖启用配额、设置软硬限制、常用命令及最佳实践,适用于主流Linux发行版,提升系统稳定性与安全性。
|
5月前
|
负载均衡 监控 Linux
Linux网络中断优化配置(提升服务器网络性能的实用指南)
本文教你如何优化Linux网络中断处理,通过启用网卡多队列和配置中断亲和性,实现CPU负载均衡,提升高并发下的网络性能,适合新手快速上手。
|
5月前
|
运维 安全 应用服务中间件
强化网站安全的利器(Nginx中如何正确配置HSTS安全头)
本文介绍如何在Nginx中配置HSTS安全头,提升网站安全性。通过启用HSTS,强制浏览器使用HTTPS通信,有效防御中间人攻击。内容涵盖配置步骤、参数详解、注意事项及验证方法,适合新手快速上手,助力实现Web安全最佳实践。
|
5月前
|
存储 缓存 运维
Nginx缓存大小限制详解(手把手教你控制缓存空间,避免磁盘爆满)
本文教你如何设置Nginx缓存大小限制,避免缓存无节制增长导致磁盘占满。通过配置proxy_cache_path的max_size等参数,合理控制缓存空间,提升网站性能的同时保障服务器稳定运行,适合小白用户快速上手。
Nginx缓存大小限制详解(手把手教你控制缓存空间,避免磁盘爆满)