Python面向对象编程:进阶篇(封装、继承和多态)

前面的文章里面,我们讲了面向对象的入门概念:Python面向对象编程:入门篇(类和对象),接下来,我们继续学习进阶的内容封装、继承和多态

如果没有看前面的内容,一定要去学习一下哦!!!!!

封装、继承和多态作为Python面向对象编程(OOP)三个核心概念,它们是面向对象程序设计的基石,允许我们以更加模块化、可维护的方式编写代码。下面我们一起来学习。

1. 封装 (Encapsulation)

封装是指将数据(属性)和操作数据的方法(方法)捆绑在一起的机制。在封装中,对象的内部细节被隐藏起来,只有特定的方法才能访问和操作这些细节。这有助于确保数据的安全性和代码的可维护性。

封装具有以下优势:

优势 描述
安全性 隐藏对象的实现细节,防止外部直接访问和修改对象的内部状态,从而保护数据的安全性。
简化调用 使用者无需了解对象的内部实现细节,只需知道如何使用对象提供的接口即可。这简化了调用对象的过程,降低了使用的复杂度。
降低耦合度 封装使得对象的内部改变不会影响到外部的代码。对象的内部细节可以自由改变,而不会影响到使用该对象的其他部分。
提高代码的可维护性 封装使得代码模块化,每个模块都有清晰的功能和接口。当需要修改代码时,可以更容易地定位和修改相关的部分。

 

1.1 如何实现封装?

封装可以通过访问控制和访问修饰符来实现。主要有两种访问修饰符:公有属性和方法、私有属性和方法。

  • 公有属性和方法 (Public Attributes and Methods)

可以被类的外部访问。在 Python 中,默认情况下,类的所有属性和方法都是公有的

class Person:
    def __init__(self, name, age):
        self.name = name   # 公有属性
        self.age = age     # 公有属性

    def get_name(self):
        return self.name   # 公有方法

# 使用公有属性和方法
person1 = Person("Tiyong", 30)
print(person1.name)  # 输出: Tiyong
print(person1.get_name())  # 输出: Tiyong

在这个例子中,Person类有一个公有方法 get_name(),那么其他类或代码可以通过调用这个方法来获取对象的名称。同样,有一个公有属性 age,那么其他类或代码可以直接访问和修改这个属性。所以,我们的实例对象就可以访问公共的属性和方法。

  • 私有属性和方法 (Private Attributes and Methods)

只能在类的内部访问,外部无法直接访问。在 Python 中,可以在属性名或方法名前加上双下划线 ‘__’ 来定义私有属性和方法。

class Person:
    def __init__(self, name, age):
        self.__name = name   # 私有属性
        self.__age = age     # 私有属性

    def __display_info(self):
        return f"Name: {self.__name}, Age: {self.__age}"   # 私有方法

# 外部无法直接访问私有属性和方法
person1 = Person("TiYong", 25)
# print(person1.__name)  # 这会引发错误,因为__name是私有属性
# print(person1.__display_info())  # 这会引发错误,因为__display_info()是私有方法

在上面的例子中:person1对象就不能访问__name私有属性和__display_info()私有方法。

尽管外部无法直接访问私有属性和方法,但我们仍然可以通过公有方法来间接访问和操作它们。这种间接访问的方式使得我们可以控制对象的状态和行为,确保数据的一致性和安全性。

class Person:
    def __init__(self, name, age):
        self.__name = name   # 私有属性
        self.__age = age     # 私有属性

    def get_name(self):
        return self.__name   # 公有方法

    def set_name(self, new_name):
        self.__name = new_name   # 公有方法,用于修改私有属性

    def display_info(self):
        return f"Name: {self.__name}, Age: {self.__age}"   # 公有方法

# 通过公有方法访问和修改私有属性
person1 = Person("TiYong", 30)
print(person1.get_name())  # 输出: TiYong
person1.set_name("Toy")
print(person1.display_info())  # 输出: Name: Toy, Age: 30

那么,封装通过隐藏对象的内部细节、定义清晰的接口,提高了代码的安全性、可维护性和复用性,这就使得我们的程序更加健壮和易于开发与维护了。

 

2. 继承(Inheritance)

继承就是允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类可以继承父类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TiYong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值