当前位置:首页>python>Python基础——面向对象

Python基础——面向对象

  • 2026-08-26 11:12:25
Python基础——面向对象
大家好,我是Raines。
每天一个数据小知识,今天的主题是【面向对象】
上一篇我们对比讲解了面向过程编程和面向对象编程,今天再补充一下面向对象核心概念以及重要的三大特征:封装、继承、多态
一、核心概念:
1.类:
对象的蓝图或模板,定义了对象的属性和方法
class Person:    """人类"""    pass

2.对象/实例:

类的具体实现

person1 = Person()  # 创建Person类的实例

3.属性:

对象的特征或数据

class Person:    def __init__(self, name):        self.name = name  # 实例属性        Person.species = "人类"  # 类属性

4.方法:

对象的行为或功能

class Person:    def say_hello(self):  # 实例方法        print(f"你好,我是{self.name}")    @classmethod    def get_species(cls):  # 类方法        return cls.species    @staticmethod    def is_adult(age):  # 静态方法        return age >= 18
二、面向对象特征
1.封装
将数据和方法包装在类中,隐藏内部实现细节

封装是面向对象最基本也最重要的特性。它就像给代码穿上防护服——只暴露必要的接口,隐藏内部复杂的实现细节。

想象一下你用的智能手机:你只需要知道按哪里可以打电话、哪里可以拍照,不需要了解里面的芯片是怎么工作的。这就是封装。

class BankAccount:    def __init__(self, owner, balance=0):        self.owner = owner        self.__balance = balance  # 私有属性    def deposit(self, amount):        """存款"""        if amount > 0:            self.__balance += amount            return True        return False    def withdraw(self, amount):        """取款"""        if 0 < amount <= self.__balance:            self.__balance -= amount            return True        return False    def get_balance(self):        """获取余额(通过方法访问私有属性)"""        return self.__balance
2.继承
子类继承父类的属性和方法
# 父类class Animal:    def __init__(self, name):        self.name = name    def speak(self):        raise NotImplementedError("子类必须实现此方法")# 子类继承class Dog(Animal):    def __init__(self, name, breed):        super().__init__(name)  # 调用父类构造函数        self.breed = breed    def speak(self):  # 方法重写        return "汪汪!"    def fetch(self):  # 子类特有方法        return f"{self.name}在接飞盘"# 多级继承class Puppy(Dog):    def __init__(self, name, breed, age_months):        super().__init__(name, breed)        self.age_months = age_months    def speak(self):        return "呜呜~(小声)"
注意事项:
(1)继承时要先用super().__init__(*args)调用父类的构造函数
(2)如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法,比如上例中的speak方法
3.多态
不同对象对同一方法做出不同的响应
比如下面的例子中,我们创建了Shape类、Rectangle类和Circle类,并各自定义了area方法,虽然方法名相同,但实现并不一样。
class Shape:    def area(self):        passclass Rectangle(Shape):    def __init__(self, width, height):        self.width = width        self.height = height    def area(self):        return self.width * self.heightclass Circle(Shape):    def __init__(self, radius):        self.radius = radius    def area(self):        return 3.14159 * self.radius ** 2# 多态演示shapes = [Rectangle(34), Circle(5), Rectangle(26)]for shape in shapes:    print(f"面积: {shape.area()}")# 输出:# 面积: 12# 面积: 78.53975# 面积: 12
三、面向对象设计原则——SOLID:

1.单一职责原则一个类只做一件事

2.开闭原则:对扩展开放,对修改关闭

3.里氏替换原则:子类可以替换父类

4.接口隔离原则:接口要小而专一

5.依赖倒置原则:依赖抽象,不依赖具体

面向对象编程不仅仅是语法,更是一种思维方式。它教会我们如何:

  1. 分解复杂问题:将大系统拆分成小对象

  2. 管理代码复杂度:通过封装隐藏细节

  3. 提高代码复用:通过继承和组合

  4. 增强系统灵活性:通过多态和抽象

刚开始可能会觉得面向对象有些“过度设计”,但随着项目规模的增长,你会发现它的价值——让代码既有弹性又有纪律,既能快速响应变化又能保持稳定。

四、汇总
小思考:

以下代码实现了一个图形计算系统,选择正确的输出结果:

from abc import ABC, abstractmethodimport mathclass Shape(ABC):    @abstractmethod    def area(self):        pass    @abstractmethod    def perimeter(self):        pass    def description(self):        return f"这是一个{self.__class__.__name__}"class Circle(Shape):    def __init__(self, radius):        self.radius = radius    def area(self):        return math.pi * self.radius ** 2    def perimeter(self):        return 2 * math.pi * self.radius    def diameter(self):        return 2 * self.radiusclass Square(Shape):    def __init__(self, side):        self.side = side    def area(self):        return self.side ** 2    def perimeter(self):        return 4 * self.sideclass Rectangle(Square):    def __init__(self, length, width):        super().__init__(length)  # 注意这里!        self.width = width    def area(self):        return self.side * self.width    def perimeter(self):        return 2 * (self.side + self.width)# 测试代码shapes = [    Circle(5),    Square(4),    Rectangle(36)]results = []for shape in shapes:    if isinstance(shape, Circle):        results.append(f"直径: {shape.diameter():.1f}")    results.append(f"面积: {shape.area():.1f}")    results.append(f"周长: {shape.perimeter():.1f}")# 问题:results 列表中的第三个元素是什么?
A. "面积: 78.5"B. "面积: 28.3"C. "面积: 18.0"D. "面积: 12.0"
上期答案:

判断以下说法是否正确:

  1. 面向对象编程的核心思想是将程序看作一系列步骤的集合。 (×)

2.类是对现实世界实体的抽象,对象是类的具体实例。 (√)

3.面向对象编程相比面向过程编程,执行效率总是更高。 (×)

如果想一起学习数据分析相关知识,一起交流的朋友,欢迎加我微信,备注【数之真理】9.9元解锁每日数据小知识分享,全网新手最友好!干货最充足!氛围最好的数据分析分享群等你加入!
群聊福利包含但不限于:
1.思维导图源文件分享
2.Excel公式分享
3.群内互动及问题解答
更多高能福利持续解锁中,福利多多,千万不要错过!!
1对1数据咨询开放中,欢迎加V预约咨询,首次咨询享超值优惠

最新文章

随机文章