Python 7( 面向对象,实例变量,类,继承,多态 )

本文介绍了Python的面向对象编程,包括类的构造函数、实例变量、类变量、析构函数、私有方法/属性、类的继承和多态。详细阐述了封装、继承和多态的核心概念,并通过示例代码演示了它们的工作原理和使用方法。

本节内容

  • 面向对象编程介绍
  • 为什么用面向对象进行开发
  • 面向对象的特性:封装,继承,多态
  • 类,属性,方法,构造函数,析构函数
  • 类变量,实例变量

面向对象编程介绍

  • 编程范式(面向对象,过程,函数式编程)

面向过程

在这里插入图片描述
在这里插入图片描述
               
面向对象 OOP
在这里插入图片描述

面向对象的几个核心特性

  • Class 类
    一个类 即对一类拥有相同属性的对象的抽象,蓝图,原型。在类中定义了这些对象的都具备的属性(variables(data)),共同的方法。

  • Object 对象
    一个对象即是一个类的实例化后实例,一个类必须经过实例化方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性。

  • Encapsulation 封装
    在类中对数据的赋值,内部调用对外部用户是透明的,这使类变成了一个容器,里面包含着类的数据和方法

  • Inheritance 继承
    一个类可以派生出子类,在这个父类里定义的属性,方法自动被子类继承

  • Polymorphism 多态
    ”一个接口,多种实现“
    一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法进行了不同的实现,这就是 同一种事物表现出的多种形态。
    在这里插入图片描述

1 构造函数及其原理

在这里插入图片描述
在这里插入图片描述

2 实例变量

在这里插入图片描述
总结:
变量 就是 静态属性
方法 就是 动态属性

ps:
1 若已经实例化为一个对象之后,去给属性赋值,则结果更新
2 若赋值属性不是类中构造函数的参数 ,赋值之后仍然可以调用
主要 因为 构造函数的原理 传入实例引用 之后属性赋值就相当于具体实例的属性赋值 和原始类无关
在这里插入图片描述
结果:
在这里插入图片描述

3 类变量

  • 在 2 的函数中加入类变量
    在这里插入图片描述
    结果
    在这里插入图片描述
    总结
    d1 其实相当于新增了一个实例属性 打印时直接打印该值
    d2 打印时发现实例没有此属性 只能找类变量 并输出该值
    当后续更改类变量的值时 d1 没有影响 d2 随之改变

  • 同理,加入类变量 n_list
    在这里插入图片描述
    在这里插入图片描述
    结果
    在这里插入图片描述
    总结
    发现这两个调用的是一个list 因为留存的是地址 指向原有的list

4 析构函数

在实例释放,销毁的时候自动执行的,通常用于做一些收尾工作,如关闭一些数据库连接,打开的临时文件

  • 生成两个对象 执行各自程序之后 删除
    在这里插入图片描述
    结果
    在这里插入图片描述

  • 生成两个对象 执行完一个对象之后立即del
    在这里插入图片描述
    结果
    在这里插入图片描述
    总结
    实例对象不主动删除则仍然存在
    默认是执行完程序之后析构函数自动删除
    若想早些删除 则del +对象名

5 私有方法/属性

  • 私有属性 变量名前加__ (两个_)
    在这里插入图片描述

  • 在公开方法内部调用私有属性 ok
    在这里插入图片描述

  • 若不通过方法,直接想要打印私有属性 not ok
    在这里插入图片描述
    结果
    在这里插入图片描述

  • 私有方法 方法名前加__ (两个_)
    在这里插入图片描述
    结果 not ok
    在这里插入图片描述

5 类的继承

  • 常规示例
    在这里插入图片描述
    在这里插入图片描述
    结果
    在这里插入图片描述

  • 更高级的写法
    super( 子类,self).init(在父类初始化函数中的参数)
    在这里插入图片描述
    用super()的好处在于一旦父类名改变,用到父类的子类方法无需随之更新,便于代码的修改和维护

  • 多继承
    子类
    在这里插入图片描述
    两个父类
    在这里插入图片描述
    执行1
    在这里插入图片描述
    结果1
    在这里插入图片描述
    总结
    多继承 先继承左边的 再右边

  • 经典类和新式类的继承顺序
    以A,B,C,D为例:
    在这里插入图片描述
    在这里插入图片描述
    结果
    D 有自己的def init(self) 则执行
    若无 则先左边的初始化函数------左无-------右边的初始化----均无----往上一层的类的初始化函数
    D—>B---->C---->A
    这一规律也称为 “广度优先”原则
    总结
    而在python 2中经典类 class X: 是“深度优先”原则
    在此例中应该为 D—>B---->A
    新式类 class XXX(object): 按照“广度优先”原则
    D---->B----->C----->A
    在python 3中均是广度优先原则

  • 多继承实例(学校,学校的人)
    建立四个类
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    测试
    在这里插入图片描述
    结果
    在这里插入图片描述

  • 阶段性总结

  • 继承:
    可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展

  • 实现继承:
    通过“继承”Inheritance 和“组合”Composition 来实现

  • 继承概念的实现方式有3类
    实现继承 使用基类的属性和方法而无需额外编码的能力
    接口继承 仅使用属性和方法的名称,但是子类必须提供实现的能力
    可视继承 子窗体(类)使用基窗体(类)的外观和实现代码的能力

  • OOP开发范式
    划分对象—>抽象类---->将类组织成为层次化结构(继承和合成)—>用类与实例进行设计与实现几个阶段

6 多态

  • 一个接口 多种实现

  • 定义:
    多态性是 允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给他的子对象的特性以不同的方式运作。简洁说,允许将子类类型的指针赋值给父类类型的指针。

  • 作用:
    封装可以隐藏实现细节,使得代码模块化
    继承可以扩展已存在的代码模块
    以上两者目的都是为了-----代码重用
    多态----实现另一个目的----接口重用
    作用:为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一个属性时的正确调用。

  • 例子
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

【3D应力敏感度分析拓扑优化】【基于p-范数全局应力衡量的3D敏感度分析】基于伴随方法的有限元分析和p-范数应力敏感度分析(Matlab代码实现)内容概要:本文档介绍了基于伴随方法的有限元分析与p-范数全局应力衡量的3D应力敏感度分析,并结合拓扑优化技术,提供了完整的Matlab代码实现方案。该方法通过有限元建模计算结构在载荷作用下的应力分布,采用p-范数对全局应力进行有效聚合,避免传统方法中应力约束过多的问题,进而利用伴随法高效求解设计变量对应力的敏感度,为结构优化提供关键梯度信息。整个流程涵盖了从有限元分析、应力评估到敏感度计算的核心环节,适用于复杂三维结构的轻量化与高强度设计。; 适合人群:具备有限元分析基础、拓扑优化背景及Matlab编程能力的研究生、科研人员与工程技术人员,尤其适合从事结构设计、力学仿真与多学科优化的相关从业者; 使用场景及目标:①用于实现高精度三维结构的应力约束拓扑优化;②帮助理解伴随法在敏感度分析中的应用原理与编程实现;③服务于科研复现、论文写作与工程项目中的结构性能提升需求; 阅读建议:建议读者结合有限元理论与优化算法知识,逐步调试Matlab代码,重点关注伴随方程的构建与p-范数的数值处理技巧,以深入掌握方法本质并实现个性化拓展。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值