面向对象总复习

面向过程编程思想:

​ 核心是过程,过程指的是做事情的步骤,即先干什么再干什么。

​ 基于该编程思想编程,就好比一条流水线,一种机械式的思维方式。

面向对象编程思想:

​ 核心是对象,对象指的是特征与机能的结合体。

​ 基于该编程思想编程,就好比创造世界,一种上帝式的思维方式。

类:

​ 类指的是一系列对象相同的特征与技能的结合体。

如何定义类:

​ 先抽象,抽取对象之间相同的特征与技能。

​ 再定义类。

定义类时会发生哪些事情:

​ 会产生一个类的名称空间

​ 会把类内部的所有名字,扔进该名称空间中

​ 注意:定义类时,就会执行类内部的代码,若语法不正确,则会报错。

如何产生对象:

​ 调用类会产生一个对象,调用类的过程称之为类的实例化,对象称之为类的一个实例化。

​ --init--:调用类时触发该方法。

调用类时发生的事情:

​ 调用类会产生一个对象的名称空间。

​ 会触发--init--,接着把对象与括号内所有的参数都传给--init--(),把对象当作第一个参数。

​ 在--init--内部,可以给对象添加属性。

对象的名字查找:

​ 先找对象自己的

​ 若对象没有,则去类中查找

​ 类中没有,则会默认继承object类中查找

对象的绑定方法特殊之处:

​ 类来调用,类内部的方法只是一个普通的函数,函数需要几个参数就传几个。

​ 对象的绑定方法,由对象来调用,会自动把对象当作第一个参数传给该方法。

​ 注意:不同对象调用对象的绑定方法,会绑定给不同的对象

一切皆对象:

​ 在python中一切皆对象。

​ python八大数据类型皆为对象:

​ n =10 #n = int(10)

​ list truple set dict float bool str int

​ 内置函数:filter

继承:

​ 继承指的是新建类的方式,新建的类指的子类或派生类。

​ 子类可以继承一个父类,父类又可以称之为基类或超类。

如何查找继承关系:

​ 必须遵循“先抽象,再继承”

抽象:

​ 抽取相似的部分

​ --先抽象

​ 抽取相似的部分。

​ --再继承

​ 确认好之类与父类

​ 定义父类,父类中写类与类之间相同的特征与技能。

​ 子类继承与父类的属性

class Father:

​ pass

class Sub(Father):

​ pass

继承关系:

​ 类是对象与对象之间的关系,类是一系列对象相同的特征与技能的结合体。

​ 继承是类与类之间的关系,子类与父类是一种从属关系。

派生:

​ 派生值的子类继承父类的属性,并派生出自己的属性。

子类可以派生出自己的属性,并重用父类的属性。

​ 直接调用类,类名.属性的方式重用父类的属性。

​ super(),super().指的是父类的名称空间,重用父类的属 性。

​ 注意:子类派生出与父类相同的属性,以子类的为主。

在继承背景下,对象属性的查找顺序

​ 先从对象的名称空间中查找

​ 去类的名称空间中查找

​ 去父类的名称空间中查找

​ 去object里面查找,若没有则报错。

新式类与经典类:

​ 继承object的类,都称之为新式类。

​ 在python2中,没有继承object的类,都称之为经典类。

砖石继承:

​ 新式类:

​ 广度优先

​ 经典类:

​ 深度优先

组合:

​ 组合指的是一个对象的属性,是另一个对象。

​ 组合的作用,与继承一样,都是解决代码冗余问题。

​ 继承的有点:

​ 编写代码的复杂程度没有组合高。

​ 继承的缺点:

​ 耦合度太高,可扩展性差。

​ 组合的优点:

​ 可以让类与类之间解耦合,可扩展性高。

​ 组合的缺点:

​ 编写的复杂程度高于继承

封装:

​ 封装指的是把一堆属性,封装到对象中,对象就好比一个袋子,或是一个容器。

​ 优点:

​ 方便数据的存取

​ 可以通过“对象.属性”的方式获取与方法。

​ 封装是面向对象的核心

访问机制:

​ 在类内部,凡事以——开头的属性,都会被隐藏,不轻易被直接调用,保证数据安全。

​ 比如与金钱,用户信息相关的操作

property:

​ 让看起来像动词的方法,变成一名词的方式调用。

​ 方法名 不需要加括号调用。

多态:

​ 同一样事物的多种形态。

​ 水:液态水,固态水,气态水

​ 多态的目的

​ 为了统一代码编写规范。

​ 多态的实现方式:

​ 继承:

​ 子类继承父类的特征与技能。

​ 抽象类:

​ 导入一个abc模块

​ 让父类继承一个ABCMeta

​ 给类内部所有的方法加上abc.abcstracmethod装饰器,子类继承抽象类,强制让子类继承父类的方法,缺一不可。

​ 鸭子类型

​ 只要长得像鸭子,你就是鸭子了

class method:

​ 是一个装饰器,用来装饰在类内部的方法,可以让该方法变成类的绑定方法。

​ 对象绑定方法:

​ 由对象来调用,会把对象当作第一个参数传给该方法

​ 类的绑定方法:

​ 由类来调用,会把类当作第一个参数传给该方法。

staticmethod:

​ 是一个装饰器,用来装饰在类内部的方法,可以让该方法变成非绑定方法。

​ 非绑定方法特殊之处:

​ 由谁来调用都是一个普通该函数。

面向对象高级:

​ isintance:

​ 判断对象是否是一个类的实例

​ issubclass:

​ 判断一个类是否是另一个类的子类。

​ 反射:

​ 通过字符串操作对象或类的属性。

​ hasattr:判断字符串是否是一个对象的属性

​ getattr:通过字符串,获取一个对象或类的属性,若没有默认是none。(‘对象或类’,‘字符串属性名’,‘自定义的默认值’)

​ setattr:通过字符串,设置一个对象或类的属性。(‘对象或类’,‘字符串属性名’,‘属性的值’)

​ delattr:通过字符串,删除一个对象或类的属性。(’对象或类‘,’删除的字符串属性名‘)

魔法方法(类的内置方法):

​ --Init--:在调用类时触发,在--new--没有返回一个空对象时不会触发。

​ --new--:在--init--执行前触发,必须要返回一个空对象。(-object.--new--(cls) #cls-->当前类)

​ --str--:在打印对象时触发。

​ --getattr--:会在对象.属性,不管属性有没有都会触发。

加分项(面试会问):

​ --setattr--:会在对象.属性=属性值时触发。

​ --del--:会在对象被销毁前触发。

​ --call--:会调用对象时执行。

​ --delattr--:会在对象删除属性时触发。

单例模式:

​ 单例模式指的是,调用一个类时实例化得到多个对象时,对象指向同一个名称空间。

​ --@classmethod

​ --new--

day 23的更多相关文章

  1. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  2. ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id

    出现场景:当点击"分类"再返回"首页"时,发生error退出   BUG描述:Caused by: java.lang.IllegalArgumentExcep ...

  3. CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator

    CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator 我还没有用过Compute Shader,所以现在把红宝书里的例子拿来了,加入CSharpGL中. ...

  4. ABP(现代ASP.NET样板开发框架)系列之23、ABP展现层——异常处理

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之23.ABP展现层——异常处理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...

  5. Java开发中的23种设计模式详解(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  6. C#得到某月最后一天晚上23:59:59和某月第一天00:00:00

    项目需求: 某学校订单截止操作时间的上一个月最后一天晚上23:59:59 为止所有支付的订单统计: 代码: /// <summary> /// 通过学校和截止时间得到订单 /// < ...

  7. C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试

    在上篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及对应的对象模型,本篇继续微信小店的主题,介绍其中API接口的封装和测试使用.微信小店的相 ...

  8. [转载]IIS7报500.23错误的解决方法

    原文出处: 原文作者:pizibaidu 原文链接:http://pizibaidu.blog.51cto.com/1361909/1794446 背景:今天公司终端上有一个功能打开异常,报500错误 ...

  9. [MySQL Reference Manual] 23 Performance Schema结构

    23 MySQL Performance Schema 23 MySQL Performance Schema 23.1 性能框架快速启动 23.2 性能框架配置 23.2.1 性能框架编译时配置 2 ...

  10. Error:failed to find Build Tools revision 23.0.0 rc3

    解决,选择AS里有的版本就可以了,已有的我这就一个23.0.3,导入的项目是23.0.2 Donate:)

随机推荐

  1. ASP.NET MVC实现依赖注入

    在java的spring中有自动注入功能,使得代码变得更加简洁灵活,所以想把这个功能移植到c#中,接下来逐步分析实现过程 1.使用自动注入场景分析 在asp.net mvc中,无论是什么代码逻辑分层, ...

  2. IDEA中创建maven web项目

    本文将带你一路从IDEA中maven的配置到创建maven web项目,掌握IDEA中maven的使用. 一.IDEA中配置maven 开发中一般我们使用自己下载的maven,不使用IDEA工具自带的 ...

  3. springboot打包jar包后运行

    我们知道,spring boot内嵌tomcat,打包成jar包以后,直接就可以运行. 我们也可以使用启动项里面的mian入口来运行程序. 运行jar包时,我们一般是java -jar xxx.jar ...

  4. SpringBoot中获取微信用户信息从未如此简单!

    前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...

  5. FreeSql (十二)更新数据时指定列

    var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + "Initia ...

  6. django模型层之多表关系

    一. 多表操作 数据库表关系之关联字段与外键约束 一对多 book(多) publish(一) 查询<<水浒传>>这本书出版社的地址: select publish_id fr ...

  7. Salesforce学习之路-developer篇(二)利用Jenkins和Bitbucket实现Salesforce的CI/CD功能

    上文提到,基于CRM的二次开发是必不可少的,但是在实际项目中CI/CD是不可忽略的一个重要部分,与传统的Java,Python项目不同,如果对Salesforce进行持续集成和持续部署呢? 结合找到的 ...

  8. windows下使用zkui

    一,前言 使用zkui可以很方便的查看操作zookeeper 二,从源代码生成可执行jar zkui在github上的地址:https://github.com/DeemOpen/zkui 使用ide ...

  9. Centos修改yum源为国内阿里源

    以下为修改Centos6.5的yum源: 1. 备份原镜像文件,便于后期恢复 [root@keepmydream ~]# mv /etc/yum.repos.d/CentOS-Base.repo /e ...

  10. electron教程(一): electron的安装和项目的创建

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使 ...