深入解析面向对象编程(OOP)的三大核心特性:封装、继承与多态性

面向对象编程(Object-oriented programming,OOP)的三大特性——封装、继承和多态。

1. 封装:保护数据和隐藏实现细节

封装:隐藏对象的内部状态和行为实现细节,仅通过一个定义良好的接口与对象交互。

class Account:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.__balance = balance  # 私有属性

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount
            print("存款成功")

    def withdraw(self, amount):
        if 0 < amount <= self.__balance:
            self.__balance -= amount
            print("取款成功")

    def get_balance(self):
        return self.__balance

  • 封装细节:私有属性 __balance 阻止了外部直接访问和修改账户余额,这保护了数据的完整性。
  • 公共接口:通过 depositwithdraw 方法提供的公共接口,允许在检查合法性的前提下进行交互,确保了操作的安全性。
  • 数据获取get_balance 方法提供了一种安全的方式来获取账户余额,而不允许直接访问内部数据。

补充:在属性名前使用双下划线 __使其变为私有,防止直接访问这些属性,从而实现封装。

2. 继承:提高代码复用性

继承允许一个类(子类)继承另一个类(父类)的属性和方法。这使得开发者可以建立一个层次化的类结构,提高代码的复用性,并使得代码结构更加清晰。

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

    def introduce(self):
        print(f"名字: {self.name}")

class Student(Person):
    def __init__(self, name, school):
        super().__init__(name)
        self.school = school

    def introduce(self):
        super().introduce()
        print(f"学校: {self.school}")

# 使用
student = Student("Alice", "MIT")
student.introduce()
  • 基类(Person):负责管理人的基本信息,如名字。
  • 派生类(Student):扩展了基类,增加了学校信息,并重写了 introduce 方法来包含学校信息。
  • 方法调用super().introduce() 在派生类中调用基类的 introduce 方法,确保了名字的正确介绍,并在其后添加了学校信息。

3. 多态:接口一致,实现多样

多态是指同一个接口可以被不同的对象以不同的方式实现。

class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print("Woof!")

class Cat(Animal):
    def speak(self):
        print("Meow!")

def animal_sound(animal):
    animal.speak()

# 使用
dog = Dog()
cat = Cat()
animal_sound(dog)
animal_sound(cat)

Animal 类定义了一个 speak 方法,但没有具体实现。

DogCat 类继承了 Animal 并重写了 speak 方法以提供具体的实现。

animal_sound 函数演示了如何通过传递不同的对象来调用同一方法,这些对象表现出不同的行为。这就是多态的实质:相同的函数调用,根据传入的对象的类型,可以产生不同的行为。


推荐我的相关专栏: python 错误记录

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peter-Lu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值