九:面向对象

1.OOP

python没有面向对象完全可以用函数解决所有的编程问题,有了OOP让变成更加有条理.

但是java就是完全的面向对象,所有都封装在类里面,单独方法不能出现在类之外.python天生多态,java里面的多态多用接口和父类

面相函数编程:多数情况下数据是函数内部传入函数内部,得到函数执行结果,完成需求

面向对象编程:将数据初始化的时候封装到对象里面,方法用数据直接用对象里面的.

面向函数数据和逻辑是分离的,面向对象的数据和函数是封装在一个对象里面常驻内存,方便后续重复使用.

从IDE角度来讲,面向函数编程那么多函数名根本记不住,那么面向对象把解决一类问题的方法放到一个类中,创建对象初始化传入数据,拿着这个对象就可以解决此类问题,对象.方法名,不用记住因为有提示.

1.1面向对象VS面向函数

面向函数定义简单,调用简单,面向函数里面的*args和**kwargs其实就是封装的意思,但是传的数据是随意的个数,访问只能用索引

oop中通过初始化方法,将数据封装到对象里面,用的时候直接self.属性名就可以拿值,没有的属性名.不出来,也获取不到值,对数据进行了范围约束.

面向对象定义复杂,调用复杂,但是它将解决一类问题的方法进行了分类,逻辑上结构上更清晰,更加符合人类的思维.

函数是编程如果没有默认参数,每次调用都要开栈帧,传数据.

面向对象,用类创建对象一次将数据传入,方法里面直接调用数据,调用的时候不用传参了,oop通过构造方法将数据封装到对象中.

性能方面:例如一个函数专门负责打开一个文件,所有的方法的第一步都是打开文件,调用完就结束了,磁盘IO很费性能,打开一次通道之后最好不关,一直使用直到不用,而不是用到就打开,不用就关上

而OOP在初始化的时候就放了一个f=open()打开了一个文件,那么这个对象始终持有此文件句柄,如果是网络传输打开文件,那就更费性能了,程序阻塞在那一直等待连接服务器,然后打开文件.

1.2归类

函数编程不能归类,没有学OOp之前用模块即py文件将相同功能的归于一类放在一个py文件中

java中一个文件就是一个类文件里面放处理这类问题的数据和功能,都放在一个类中

python中更加灵活,py文件中可以有函数,可以有类,也可以像java一样将函数封装到类里面,尽管个类没有任何关系,也和类里面的数据没有任何关系,就封装为@staticmethod

1.3OOP步骤

  • 归类+提取公共值,这是反推
  • 写之前已经构思好了,直接在类中编写类相关的所有代码.

2.三大特性

2.1封装

数据封装到对象中.

方法封装到类中,对象共享的数据也封装到类中.

私有数据只是用别名的方式来约束

2.2继承(为了"偷懒"重用)

  • 默认继承object类,
  • 遵循__mro__的查找规则来进行继承,
  • 个性支持多继承,可以有多个爹,还是遵守__mro__(),更复杂的多继承
  • 私有数据无法继承
  • 现在自己类中找,没有就找父类,直到object中,还没有就报错
  • 菱形 钻石继承

原文地址:https://www.cnblogs.com/gyxpy/p/11618421.html

时间: 2024-10-11 01:39:52

九:面向对象的相关文章

<九>面向对象分析之UML核心元素之设计类,类,属性,方法,可见性

设计类 --->设计类是系统实施中一个或多个对象的抽象.        --->设计类已经直接映射到实现代码了,因此设计类依赖于实施语言.另一方面,设计类来源于前期的系统分析,在统一过程中,类不是品空想像出来的.他们可以一一映射到前期系统分析的成果上.从这个观点出发,分析类的重要性就能够体现出来.分析类为设计类中多需要的界面,逻辑和数据提供了非常好的抽象基础,设计类可以非常容易和自然地从分析类中演化出来. 类        --->类对对象进行定义,而对象又实现(或成为实施)用例.类的来

(转)面向对象编程初步

1 class Hand: 2 pass 3 class Foot: 4 pass 5 class Trunk: 6 pass 7 class Head: 8 pass 9 10 class Person: 11 def __init__(self,id_num,name,hand,foot,trunk,head): 12 self.id_num=id_num 13 self.name=name 14 self.hand=Hand() 15 self.foot=Foot() 16 self.tr

Python 面向对象和实例属性

一.三大编程范式 编程范式即编程的方法论,标识一种编程风格. 我们学习完Python语法后,就可以写python代码了,然后每个人写代码的风格不同,这些不同的风格就代表了不同的流派. 如果把python的基本语法比作无数的基本功,那么不同的编程风格就好比不同的武林门派. 虽然大家风格不同,但是都可以完成你的编程需求,Python是一门面向对象编程语言,但是到目前为止,你从未接触面向对象编程,然而你已经可以解决很多问题了,在Python中并没有人强制你使用哪一种固定的风格. 根本就没有什么门派是天

第十九章 面向对象的工具

学习要点:1.OOP 的魔术方法2.类函数和对象函数3.OOP 的反射API PHP通过类和方法等语言结构支持面向对象编程.同时也通过对象相关的函数和内置类为面向对象提供广泛支持. 一.OOP的魔术方法 PHP引入了__autoload()内置方法来自动包含类文件.__autoload()应该被写成单个参数的方法.当PHP引擎遇到试图实例化未知类的操作时,会调用__autoload()方法,并将类名当作字符串参数传递给它. function __autoload($_className) { r

零散知识点(面向对象七大设计原则,jdbc--BaseDao,jsp九大内置对象。四个作用域)

面向对象七大设计原则: 1.开闭原则(OCP:Open-Closed Principle)2.里氏替换原则(LSP:Liskov Substitution Principle) 3.单一职责原则(SRP:Single responsibility principle)4.接口隔离原则(ISP:Interface Segregation Principle)5.依赖倒置原则(DIP:Dependence Inversion Principle)6.迪米特法则(LOD:Law of Demeter)

sdut 面向对象程序设计上机练习九(对象指针)

面向对象程序设计上机练习九(对象指针) Time Limit: 1000MS Memory limit: 65536K 题目描述 建立对象数组,内放5个学生数据(学号是字符串类型.成绩是整型),设立max函数,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号和成绩. 输入 输入5个学生数据. 输出 输出5个学生中成绩最高者的学号和成绩. 示例输入 01 89 02 78 03 56 04 92 05 76 示例输出 04 92 来源 #include <iostr

java面向对象编程(九)--final

1.final概念 final可以修饰变量或者方法.在某些情况下,程序员可能有以下需求: a.当不希望父类的某个方法被子类覆盖(override)时,可以用final关键字修饰. b.当不希望类的某个变量的值被修改,可以用final修饰.如果一个变量是final,则必须赋初值,否则编译出错. c.当不希望类被继承时,可以用final修饰. //final方法的使用[Demo128.java] public class Demo128 { public static void main(Strin

20182332 《数据结构与面向对象程序设计》实验九报告

20182332 <数据结构与面向对象程序设计>实验九报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 盛国榕 学号:20182332 实验教师:王志强 实验日期:2019年12月3日 必修/选修: 必修 1.实验内容: 完成图的综合实践 (1)初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数.边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)(2分) (2)图的遍历:完成有向图

20182330 2019-2020-1 《数据结构与面向对象程序设计》实验九报告

20182330 2019-2020-1 <数据结构与面向对象程序设计>实验九报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 魏冰妍 学号:20182330 实验教师:王志强 实验日期:2019年12月2日 必修/选修: 必修 1.实验内容 完成图的综合实践 (1)初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数.边个数,建议先在草稿纸上画出图,然后再输入顶点和边数) (2)图的遍