Python 面向对象全解:从入门到实战,一文搞定!

大家好,我是 亦难
今天,我将带你一次性吃透 Python 面向对象编程(OOP)的核心知识点,从基础概念到实战应用,一文搞定!


一、面向对象编程思想

1. 什么是面向过程

传统的面向过程编程思想可以用八个字总结:自顶向下,逐步细化
将要实现的功能分解为一系列步骤,依次完成这些步骤。如果某个步骤复杂,可以进一步细化为子步骤。
例如,报名学习的过程可以分解为以下步骤:

  • 学员提出报名,提供相关材料
  • 学生缴纳学费,获得缴费凭证
  • 教师凭借学生缴费凭证进行分配班级
  • 班级增加学生信息

面向过程就是将这些步骤依次执行。

2. 什么是面向对象

面向对象编程的核心是实体和动作
在上面的报名过程中,有以下动词:提出、提供、缴纳、获得、分配、增加
这些动词背后都有对应的实体(主体),例如:

  • 学生提出报名
  • 学生提供相关资料
  • 学生缴费
  • 机构收费
  • 教师分配教室
  • 班级增加学生信息

面向对象的核心思想是:将功能封装到实体中,通过实体去实现功能

3. 使用面向对象实现报名系统开发

第一步:分析动作和实体
  • 学生:提出报名、提供资料、缴费
  • 机构:收费
  • 教师:分配教室
  • 班级:增加学生信息
第二步:定义实体类
class Student:
    def __init__(self, name):
        self.name = name

    def enroll(self):
        print(f"{self.name} 提出报名")

    def provide_materials(self):
        print(f"{self.name} 提供相关资料")

    def pay_fee(self):
        print(f"{self.name} 缴纳学费")

class Institution:
    def charge_fee(self):
        print("机构收费")

class Teacher:
    def assign_classroom(self):
        print("教师分配教室")

class Class:
    def add_student(self, student):
        print(f"班级增加学生信息:{student.name}")
第三步:执行动作
student = Student("张三")
student.enroll()
student.provide_materials()
student.pay_fee()

institution = Institution()
institution.charge_fee()

teacher = Teacher()
teacher.assign_classroom()

classroom = Class()
classroom.add_student(student)

4. 面向对象编程思想迁移

  • 面向过程:先想功能,再写函数,按部就班执行。
  • 面向对象:先想主体(对象),再封装功能,通过对象调用功能。
    面向对象的核心是:封装主体,通过主体实现功能

5. 面向对象与面向过程的对比

  • 代码复用:面向对象模块化更深,数据更封闭和安全。
  • 解决问题:面向对象更贴近现实生活,适合解决复杂业务逻辑。
  • 开发难度:面向对象前期开发更复杂,但维护和扩展更简单。
  • 执行效率:面向过程代码执行效率更高。

二、面向对象的基本概念

1. 对象与类

  • 对象:现实世界中的一个实体,例如一个人、一辆车。
  • :对象的模板,定义了对象的属性和方法。
    在 Python 中,通过 class 关键字定义类,通过类实例化得到对象。

2. 类的定义

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        print(f"{self.name} 吃零食")

    def drink(self):
        print(f"{self.name} 喝可乐")

3. 类的实例化

p1 = Person("老王", 18)
p1.eat()  # 老王吃零食
p1.drink()  # 老王喝可乐

4. self 关键字

self 指向类实例对象本身。
在类的方法中,self 用于访问实例的属性和其他方法。


三、对象的属性添加与获取

1. 属性

  • 属性:对象的特征,例如人的姓名、年龄、身高。
  • 方法:对象的行为,例如人的吃饭、喝水。

2. 在类的外面添加属性

p1 = Person()
p1.name = "老王"
p1.age = 18

3. 在类的内部获取属性

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print(f"我的名字:{self.name},我的年龄:{self.age}")

p1 = Person("孙悟空", 500)
p1.speak()  # 我的名字:孙悟空,我的年龄:500

四、魔术方法

1. 什么是魔术方法

魔术方法是 Python 中具有特殊功能的方法,通常以双下划线开头和结尾。
例如:

  • __init__():初始化方法,用于对象初始化。
  • __str__():对象字符串表示方法,用于打印对象时返回字符串。
  • __del__():析构方法,用于对象销毁时执行清理工作。

2. __init__() 方法

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

p1 = Person("孙悟空", 500)
print(p1.name)  # 孙悟空
print(p1.age)  # 500

3. __str__() 方法

class Car:
    def __init__(self, brand, model, color):
        self.brand = brand
        self.model = model
        self.color = color

    def __str__(self):
        return f"汽车品牌:{self.brand},汽车型号:{self.model},汽车颜色:{self.color}"

c1 = Car("奔驰", "S600", "黑色")
print(c1)  # 汽车品牌:奔驰,汽车型号:S600,汽车颜色:黑色

4. __del__() 方法

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __del__(self):
        print(f"{self.name} 对象已经被删除")

p1 = Person("白骨精", 100)
del p1  # 白骨精对象已经被删除

五、面向对象的三大特性

1. 封装

封装是将对象的属性和方法封装到一个类中,隐藏内部实现细节,只暴露必要的接口。
封装可以分为:

  • 公有属性和方法:可以在类的外部访问。
  • 私有属性和方法:只能在类的内部访问。

2. 私有属性和方法

通过在属性名或方法名前加上两个下划线 __,可以将属性或方法定义为私有。

class Girl:
    def __init__(self, name):
        self.name = name
        self.__age = 18

    def get_age(self):
        return self.__age

    def set_age(self, age):
        self.__age = age

girl = Girl("小美")
print(girl.get_age())  # 18
girl.set_age(19)
print(girl.get_age())  # 19

3. 封装的意义

  • 数据封装:明确区分内外,控制外部对隐藏属性的操作行为。
  • 降低复杂度:通过封装,将复杂的逻辑隐藏在类内部,简化外部调用。

六、面向对象的实战案例

案例 1:学员信息类

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def print_grade(self):
        if self.score >= 90:
            print(f"学员姓名:{self.name},学员成绩:{self.score},优秀")
        elif self.score >= 80:
            print(f"学员姓名:{self.name},学员成绩:{self.score},良好")
        elif self.score >= 70:
            print(f"学员姓名:{self.name
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐