echidna

 

Python面向对象编程(OOP)小结

Python面向对象编程(OOP)小结


目录

  1. 面向对象概述

    • 面向对象 vs 面向过程
    • 核心概念:封装、继承、多态
  2. 类与对象

    • 类与对象的定义与关系
    • 类的设计三要素
    • 初始化方法 __init__ 与内置方法
  3. 封装

    • 封装的概念与实现
    • 私有属性与私有方法
    • 案例:房屋与家具的封装
  4. 继承

    • 单继承与多继承
    • 方法重写与 super()
    • 抽象类与接口设计
  5. 多态

    • 多态的定义与应用场景
    • 案例:不同子类调用相同方法
  6. 类属性和类方法

    • 类属性 vs 实例属性
    • 类方法与静态方法
    • 综合案例:游戏类设计

一、面向对象概述

1. 面向对象 vs 面向过程

特性 面向过程 面向对象
核心思想 以步骤为中心(怎么做) 以对象为中心(谁来做)
代码组织 函数顺序调用 对象职责分工,方法封装在类中
适用场景 简单任务 复杂项目,需求易变

2. 三大核心特性

  • 封装:将属性和方法封装到类中,隐藏实现细节。
  • 继承:子类复用父类的代码,支持扩展和重写。
  • 多态:不同对象调用相同方法产生不同结果,增加灵活性。

二、类与对象

1. 类与对象的定义

  • :抽象的模板,定义对象的属性和方法(如“设计图纸”)。
  • 对象:类的实例,具体存在的数据实体(如“按图纸制造的飞机”)。

语法示例

class Cat:
    def __init__(self, name):
        self.name = name  # 实例属性

    def eat(self):        # 实例方法
        print(f"{self.name} 爱吃鱼")

tom = Cat("Tom")         # 创建对象
tom.eat()                # 调用方法

2. 类的设计三要素

  1. 类名:大驼峰命名法(如 HouseItem)。
  2. 属性:对象的特征(如 name, area)。
  3. 方法:对象的行为(如 run(), eat())。

3. 初始化方法与内置方法

  • __init__:对象初始化时自动调用,用于定义属性。
  • __str__:返回对象的描述信息(print 时调用)。
  • __del__:对象销毁前自动调用,用于资源释放。

示例

class Dog:
    def __init__(self, name):
        self.name = name
        print(f"{name} 来了")

    def __str__(self):
        return f"我是小狗:{self.name}"

    def __del__(self):
        print(f"{self.name} 走了")

三、封装

1. 封装的概念

  • 目的:隐藏内部实现细节,提供公共访问接口。
  • 实现:通过类的属性和方法组织代码。

2. 私有属性与方法

  • 语法:在属性或方法名前加两个下划线 __
  • 规则:只能在类内部访问,外部无法直接调用。

示例

class Women:
    def __init__(self, name):
        self.name = name
        self.__age = 18   # 私有属性

    def __secret(self):   # 私有方法
        print(f"年龄:{self.__age}")

xiaofang = Women("小芳")
# xiaofang.__age         # 报错!无法直接访问

四、继承

1. 单继承

  • 语法class 子类名(父类名)
  • 特点:子类拥有父类所有属性和方法。

示例

class Animal:
    def eat(self):
        print("吃饭")

class Dog(Animal):       # 继承 Animal
    def bark(self):
        print("汪汪叫")

dog = Dog()
dog.eat()                # 调用父类方法

2. 多继承与 MRO

  • 语法class 子类名(父类1, 父类2)
  • MRO:方法解析顺序(通过 类名.__mro__ 查看)。

注意:避免多继承中的命名冲突,优先使用单继承。

3. 方法重写与 super()

  • 覆盖父类方法:子类定义同名方法。
  • 扩展父类方法:使用 super().父类方法() 调用父类逻辑。

示例

class XiaoTianDog(Dog):
    def bark(self):
        super().bark()      # 调用父类方法
        print("飞到天上叫")  # 扩展新功能

五、多态

1. 多态的实现

  • 前提:继承 + 方法重写。
  • 特点:不同子类调用相同方法,结果不同。

示例

class Dog:
    def game(self):
        print("普通玩耍")

class XiaoTianDog(Dog):
    def game(self):
        print("天上玩耍")

class Person:
    def play_with_dog(self, dog):
        dog.game()          # 根据传入对象类型执行不同方法

xiaoming = Person()
xiaoming.play_with_dog(Dog())        # 普通玩耍
xiaoming.play_with_dog(XiaoTianDog())# 天上玩耍

六、类属性和类方法

1. 类属性 vs 实例属性

类型 定义位置 访问方式 用途
类属性 类内部直接定义 类名.属性名 记录与类相关的特征
实例属性 __init__ 中定义 对象.属性名 记录对象特有的特征

示例

class Tool:
    count = 0            # 类属性(记录工具总数)

    def __init__(self, name):
        self.name = name # 实例属性
        Tool.count += 1

print(Tool.count)        # 输出创建的工具总数

2. 类方法与静态方法

类型 修饰器 参数 访问权限
类方法 @classmethod cls 可访问类属性和类方法
静态方法 @staticmethod 不可访问类或实例属性

示例

class Game:
    top_score = 0        # 类属性(历史最高分)

    @classmethod
    def show_top(cls):
        print(f"最高分:{cls.top_score}")

    @staticmethod
    def show_help():
        print("游戏帮助信息")

Game.show_help()         # 调用静态方法
Game.show_top()          # 调用类方法

七、注意事项

  1. 私有成员:外部通过 _类名__属性名 可强制访问,但不推荐。
  2. 多继承冲突:使用 __mro__ 查看方法解析顺序。
  3. 初始化方法:子类若定义 __init__,需手动调用 super().__init__()

通过系统学习以上内容,可全面掌握Python面向对象编程的核心思想与实践技巧。

posted on 2025-04-14 19:42  爱姬多娜  阅读(36)  评论(0)    收藏  举报

导航