day 23
目录
面向对象总复习
面向过程编程思想:
核心是过程,过程指的是做事情的步骤,即先干什么再干什么。
基于该编程思想编程,就好比一条流水线,一种机械式的思维方式。
面向对象编程思想:
核心是对象,对象指的是特征与机能的结合体。
基于该编程思想编程,就好比创造世界,一种上帝式的思维方式。
类:
类指的是一系列对象相同的特征与技能的结合体。
如何定义类:
先抽象,抽取对象之间相同的特征与技能。
再定义类。
定义类时会发生哪些事情:
会产生一个类的名称空间
会把类内部的所有名字,扔进该名称空间中
注意:定义类时,就会执行类内部的代码,若语法不正确,则会报错。
如何产生对象:
调用类会产生一个对象,调用类的过程称之为类的实例化,对象称之为类的一个实例化。
--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的更多相关文章
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id
出现场景:当点击"分类"再返回"首页"时,发生error退出 BUG描述:Caused by: java.lang.IllegalArgumentExcep ...
- CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator
CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator 我还没有用过Compute Shader,所以现在把红宝书里的例子拿来了,加入CSharpGL中. ...
- ABP(现代ASP.NET样板开发框架)系列之23、ABP展现层——异常处理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之23.ABP展现层——异常处理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- C#得到某月最后一天晚上23:59:59和某月第一天00:00:00
项目需求: 某学校订单截止操作时间的上一个月最后一天晚上23:59:59 为止所有支付的订单统计: 代码: /// <summary> /// 通过学校和截止时间得到订单 /// < ...
- C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试
在上篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及对应的对象模型,本篇继续微信小店的主题,介绍其中API接口的封装和测试使用.微信小店的相 ...
- [转载]IIS7报500.23错误的解决方法
原文出处: 原文作者:pizibaidu 原文链接:http://pizibaidu.blog.51cto.com/1361909/1794446 背景:今天公司终端上有一个功能打开异常,报500错误 ...
- [MySQL Reference Manual] 23 Performance Schema结构
23 MySQL Performance Schema 23 MySQL Performance Schema 23.1 性能框架快速启动 23.2 性能框架配置 23.2.1 性能框架编译时配置 2 ...
- Error:failed to find Build Tools revision 23.0.0 rc3
解决,选择AS里有的版本就可以了,已有的我这就一个23.0.3,导入的项目是23.0.2 Donate:)
随机推荐
- Js、layui获取单选框radio的几种方法
首先,编写HTML如下: <form id="form1"> <table border="0"> ...
- 试试 IEnumerable 的另外 6 个小例子
IEnumerable 接口是 C# 开发过程中非常重要的接口,对于其特性和用法的了解是十分必要的.本文将通过6个小例子,来熟悉一下其简单的用法. <!-- more --> 阅读建议 在 ...
- 关于JQuery.form.js异步上传文件点滴
好久没动代码了,前几天朋友委托我帮忙给做几个页面,其中有个注册带图片上传的页面.已之前的经验应该很快就能搞定,没想到的是搞了前后近一天时间.下面就说说异步上传的重要几个点,希望自己下次遇到此类问题的时 ...
- Java 字符串常量存放在堆内存还是JAVA方法区?
JDK1.7 及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池. JDK1.8开始,取消了Java方法区,取而代之的是位于直接内 ...
- Python3实战Spark大数据分析及调度 (网盘分享)
Python3实战Spark大数据分析及调度 搜索QQ号直接加群获取其它学习资料:715301384 部分课程截图: 链接:https://pan.baidu.com/s/12VDmdhN4hr7yp ...
- SpringBoot 2.0 + Apache Dubbo 2.7.3 最新版整合方案
前言 2018年2月16日,Apache Dubbo 加入 Apache 基金会孵化器.2019年5月16日,Apache 软件基金会董事会决议通过了 Apache Dubbo 的毕业申请,这意味着 ...
- @Qualifier高级应用---按类别批量依赖注入【享学Spring】
每篇一句 罗斯:选秀状元可能有水货,但MVP绝对没有 前言 在上篇文章(讲解@LoadBalanced负载均衡)的末尾,我抛出了一个很重要的问题,建议小伙伴自己深入思考一番:本文主要针对此问题,作出一 ...
- d010:盈数、亏数和完全数
题目: 对一个正整数N而言,将它除了本身以外所有的因子加起来的总和为S,如果S>N,则N为盈数,如果S<N,则N为亏数,而如果S=N,则N为完全数(Perfect Number).例如10 ...
- python中os模块再回顾
先看下我的文件目录结构 F:\PYTHON项目\ATM购物车\7月28 在此目录下的文件如下: 封装.py 模块os.sys复习.py 运行当前的文件是模块os.sys复习.py 1.获取当前文件所在 ...
- 【Jenkins持续集成(一)】SonarQube 入门安装使用教程
一.前言 持续集成管理平台不只是CI服务器,是一系列软件开发管理工具的组合. 源码版本管理:svn.git 项目构建工具:Maven.Ant 代码质量管理:Sonar(Checkstyle.PMD.F ...