Python类的优势及应用场景深度分析(代码封装与组织、继承与代码复用、多态与接口、状态管理与行为封装)(python class)

本文主要是介绍Python类的优势及应用场景深度分析(代码封装与组织、继承与代码复用、多态与接口、状态管理与行为封装)(python class),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Python 类的优势及应用场景深度分析
    • 1. 代码封装与组织
      • 1.1 封装性
        • 示例代码:用户账户管理
      • 1.2 组织性
    • 2. 继承与代码复用
      • 2.1 继承性
        • 示例代码:员工管理系统
    • 3. 多态与接口
      • 3.1 多态性
        • 示例代码:图形渲染
    • 4. 状态管理与行为的封装
      • 4.1 状态的持久化:类可以持久化内部状态,而闭包或全局变量在这方面通常表现得不那么直观和安全。
        • 示例代码:游戏状态管理

Python 类的优势及应用场景深度分析

Python 是一种广泛使用的高级编程语言,其支持多种编程范式,包括面向对象编程(OOP)。使用 Python 类相较于其他解决方案在多个方面展示出显著优势,尤其在代码的组织、可维护性、扩展性及多态性方面。本文将深入探讨使用类的优势,并通过具体的代码示例阐明其在特定应用场景下的应用价值。

1. 代码封装与组织

1.1 封装性

类通过封装技术允许数据(属性)和代码(方法)被包裹在一个单独的自包含对象中。这种封装性不仅帮助保护数据的完整性,还提高了代码的可读性和易维护性。

示例代码:用户账户管理
class Account:def __init__(self, owner, balance=0):self.owner = ownerself.__balance = balance  # 私有属性def deposit(self, amount):if amount > 0:self.__balance += amountprint(f"Added {amount} to the balance")else:print("Deposit amount must be positive")def withdraw(self, amount):if 0 < amount <= self.__balance:self.__balance -= amountprint(f"Withdrew {amount} from the balance")else:print("Invalid withdrawal amount")def get_balance(self):return self.__balance# 使用
acc = Account("John")
acc.deposit(100)
print(acc.get_balance())  # 输出: 100
acc.withdraw(50)
print(acc.get_balance())  # 输出: 50

在这里插入图片描述

1.2 组织性

类提供了一种自然的方式来将相关功能组织在一起。这种组织性使得开发者能够以模块化的方式构建和维护复杂系统。

2. 继承与代码复用

2.1 继承性

继承允许新的对象类基于现有的对象类定义。这不仅减少了代码的重复,还增强了代码的可维护性。

示例代码:员工管理系统
class Employee:raise_amount = 1.04  # 基本涨薪比例def __init__(self, first, last, pay):self.first = firstself.last = lastself.pay = paydef email(self):return f"{self.first}.{self.last}@company.com"def apply_raise(self):self.pay = int(self.pay * self.raise_amount)return self.paydef __repr__(self):return f"Employee('{self.first}', '{self.last}', {self.pay})"class Developer(Employee):raise_amount = 1.10  # 开发者涨薪比例def __init__(self, first, last, pay, prog_lang):super().__init__(first, last, pay)self.prog_lang = prog_lang  # 编程语言def __repr__(self):return f"Developer('{self.first}', '{self.last}', {self.pay}, '{self.prog_lang}')"class Manager(Employee):def __init__(self, first, last, pay, employees=None):super().__init__(first, last, pay)if employees is None:self.employees = []else:self.employees = employeesdef add_emp(self, emp):if emp not in self.employees:self.employees.append(emp)print(f"Added: {emp}")def remove_emp(self, emp):if emp in self.employees:self.employees.remove(emp)print(f"Removed: {emp}")def print_emps(self):print(f"{self.first} {self.last}'s team:")for emp in self.employees:print('-->', emp)# 使用改进后的代码
dev1 = Developer('John', 'Doe', 80000, 'Python')
dev2 = Developer('Jane', 'Smith', 90000, 'Java')
mgr = Manager('Sue', 'Smith', 90000)print("Initial team:")
mgr.print_emps()print('-' * 50)# 添加员工
mgr.add_emp(dev1)
mgr.add_emp(dev2)# 打印添加后的员工名单
print("After adding employees:")
mgr.print_emps()print('-' * 50)# 删除一个员工
mgr.remove_emp(dev1)# 打印删除后的员工名单
print("After removing an employee:")
mgr.print_emps()print('-' * 50)# 应用并打印涨薪后的薪水
print("Applying raise:")
print(f"{dev2.first}'s salary before raise: {dev2.pay}")
dev2.apply_raise()
print(f"{dev2.first}'s salary after raise: {dev2.pay}")

在这里插入图片描述

3. 多态与接口

3.1 多态性

多态性允许不同类的对象被视为同一类型的实例。这增加了程序的灵活性和扩展性。

示例代码:图形渲染
class Shape:def draw(self):raise NotImplementedError("Subclass must implement abstract method")class Circle(Shape):def draw(self):print("Drawing a circle")class Square(Shape):def draw(self):print("Drawing a square")def render_shape(shape):shape.draw()render_shape(Circle())  # 输出: Drawing a circle
render_shape(Square())  # 输出: Drawing a square
# 输出: NotImplementedError: Subclass must implement abstract method
render_shape(Shape())

在这里插入图片描述

4. 状态管理与行为的封装

4.1 状态的持久化:类可以持久化内部状态,而闭包或全局变量在这方面通常表现得不那么直观和安全。

示例代码:游戏状态管理
class Game:def __init__(self, level=0):print("Game initialized")self.level = leveldef level_up(self):self.level += 1print(f"Welcome to level {self.level}")def restart(self):self.level = 0print("Game restarted")game = Game()  # 输出: Game initialized
game.level_up()  # 输出: Welcome to level 1
game.restart()  # 输出: Game restarted

在这里插入图片描述

在深入探讨 Python 类的这些优势后,可以清楚地看到,尽管其他编程技巧如函数或模块也可用于解决类似问题,但在需要结构化和可维护的大规模应用程序中,类提供了无可比拟的优势。这些优势使得 Python 类成为设计复杂系统时的首选工具。

这篇关于Python类的优势及应用场景深度分析(代码封装与组织、继承与代码复用、多态与接口、状态管理与行为封装)(python class)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072481

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山