1、面向对象编程

1、面向过程编程
核心是”过程“二字,过程指的是解决问题的步骤,即先干什么再干什么
基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式

优点:复杂的问题流程化、进而简单化
缺点:可扩展性差

2、面向对象
核心”对象“二字,对象指的是特征与技能的结合体,
基于该思想编写程序就好比在创造一个世界,你就是这个世界的上帝,是一种
上帝式的思维方式

优点:可扩展性强
缺点:编程的复杂度高于面向过程

2、对象与类

1、类
对象是特征与技能的结合体,那类就是一系列对象相同的特征与技能的结合体 2、在现实世界中:一定先有对象,后来随着人类文明的发展总结出的类
对象是具体存在的,而类只是一种抽象概念 3、在程序中,务必保证:先定义类,后调用类来产生对象

3.类的定义 

  • 在定义类的时候,类内的代码就已经执行了
  • 在定义类时需要在类内定义一个叫__init__的函数,该函数在调用时才会执行
  • self是位置参数,用于在调用函数时接受传入的第一个参数,该参数为调用此方法的object本身
#类的实例化==》对象

#1. 若类内部没有设置__init__方法,则生成对象时自身的特殊属性加上用如#下方法
class1=ClassName()
class1.name='enon'
class1.age=18 #2.若类内部有__init__方法
class1=ClassName('enon',18)

  调用类时发生了哪些事:

1、首先会产生一个空对象stu1
2、会自动触发类内部的__init__函数
3、然后将空对象stu1连同调用类时括号内的参数组成(stu1,"egon",18),将这3个参数一起传给__init__函数

4、对象

  1.  类的实例化:调用类产生对象的过程称为类的实例化,实例化的结果是一个对象,或称为一个实例
  2.   对象属性的查找顺序:先找对象自己的名称空间----》类的名称空间
  3.   类的数据属性:是给对象用的,而且直接共享给所有对象用的,内存地址都一样
  4. 类的函数属性:也是给对象用,但是绑定给对象用的,绑定到不同的对象就是不同的
  5.   绑定方法,内存地址都不一样,但其实只想都是同一个功能
  6. 绑定方法的特殊之处:

            1、 绑定给谁就应该由谁来调用,

        2、谁来调用就会把谁当做第一个参数传入

    7.     一切皆对象:在python3中统一了类与类型的概念,类即类型

5、 继承

  1. 什么是继承:

       继承是一种新建类的方式,在python中支持一个子类继承多个父类

       新建类称为子类或派生类

       父类可以称之为基类或者超类

       子类会遗传父类的属性

2. 为什么继承

      减少代码冗余

  

3.  super()调用(严格依赖于继承)

    super()的返回值是一个特殊的对象,该对象专门用来调用父类中的属性

class OldboyTeacher(OldboyPeople):
# tea1,'egon', 18, 'male', 9, 3.1
def __init__(self, name, age, sex, level, salary):
OldboyPeople.__init__(self,name, age, sex) #调用父类方法
# super(OldboyTeacher,self).__init__(name,age,sex) 在python2中调用时用这种写法 self.level = level
self.salary = salary def tell_info(self):
# OldboyPeople.tell_info(self)
super().tell_info()
print("""
等级:%s
薪资:%s
""" %(self.level,self.salary))

super()严格依赖继承    



6、新式类与经典类

1、新式类

继承object的类,以及该类的子类,都是新式类

在python3中,如果一个类没有指定继承的父类,默认就继承object
所以说python3中所有的类都是新式类

2、经典类  (只有在python2才区分经典类与新式类):

没有继承object的类,以及该类的子类,都是经典类   

 区别: 在菱形继承的背景下,经典类和新式类才有区别。非菱形继承时,是一样的。但是当菱形继承时,新式类会采用广度优先,经典类深度优先

  深度优先:按照从左往右的顺序,每一条分支走到底,再转入下一条分支

广度优先:按照从左往右的顺序,忽略菱形最顶上的父类,将除该父类之外的所有类进行深度优先遍历,最后再查找该父类

      多继承的类便利顺序:一个对象继承多个类,按照定义顺序,从左到右,深度便利

   

      经典类遍历结果:ABEGCFD

       新式类便利结果:ABECFDG 



7、组合    

   解决类与类之间代码冗余问题有两种解决方案:1、继承 2、组合

1、继承:描述的是类与类之间,什么是什么的关系

2、组合:描述的是类与类之间的关系,是一种什么有什么关系
 一个类产生的对象,该对象拥有一个属性,这个属性的值是来自于另外一个类的对象

8、封装  

1、什么是封装

装就是把一堆属性存起来,封的概念就把这些属性给隐藏起来
强调:封装单从字面意思去看等同于隐藏,但其实封装绝对不是单纯意义的隐藏

2、为什么要用封装

  封装数据属性的目的:把数据属性封装起来,然后需要开辟接口给类外部的使用者使用,好处是我们可以在接口之上添加控制逻辑,从而严格空间访问者对属性的操作、

  封装函数属性的目的:为了隔离复杂度 

   封装的终极奥义:明确地区分内外,对外是隐藏的,对内是开放的

9、多态    

1、 什么是多态
      多态指的是同一种事物多种形态

2、为什要用多态
用基类创建一套统一的规则,强制子类去遵循(使用抽象类实现),这样便可以
在不用考虑对象具体类型的前提下而直接使用对象下的方法

3、多态性:一种调用方式,不同的执行效果(多态性)

    注意:多态与多态性是两种概念

鸭子类型:

     长得像什么,就被当作是什么

6月6日 python复习 面向对象的更多相关文章

  1. 6月5日 python复习 模块

    """1. os和sys都是干什么的?2. 你工作中都用过哪些内置模块?3. 有没有用过functools模块?"""1. os 系统相关 ...

  2. 6月7日 python 复习 collections

    collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: >>> ...

  3. 6月11日 python复习 mysql

    01. 列举常见的关系型数据库和非关系型都有那些? 1.关系型数据库通过外键关联来建立表与表之间的关系,---------常见的有:SQLite.Oracle.mysql 2.非关系型数据库通常指数据 ...

  4. 4月8日 python学习总结 模块与包

    一.包 #官网解释 Packages are a way of structuring Python's module namespace by using "dotted module n ...

  5. 4月12日 python学习总结 继承和派生

    一.继承 什么是继承:   继承是一种新建类的方式,在python中支持一个子类继承多个父类   新建类称为子类或派生类   父类可以称之为基类或者超类   子类会遗传父类的属性 2.  为什么继承 ...

  6. 4月2日 python学习总结

    昨天内容回顾: 1.迭代器 可迭代对象: 只要内置有__iter__方法的都是可迭代的对象 既有__iter__,又有__next__方法 调用__iter__方法==>得到内置的迭代器对象 调 ...

  7. 4月11日 python学习总结 对象与类

    1.类的定义 #类的定义 class 类名: 属性='xxx' def __init__(self): self.name='enon' self.age=18 def other_func: pas ...

  8. 4月10日 python学习总结 模块和面向对象

    1.hashlib  1.什么叫hash:hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值 2.hash值的特点是:2.1 只要传入的内容一样,得到的hash值必然一样=====& ...

  9. 6月4日 python学习总结 装饰器复习

    1.  装饰器的原理以及为什么要使用装饰器 在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 在不影响原代码结构的情况下为其添加功能 2.  装饰器的基本 ...

随机推荐

  1. Windows安装PostgreSQL解压版

    PostgreSQL下载地址:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads windows版,务必装在C盘! ...

  2. Spring Boot 2.x基础教程:使用tinylog记录日志

    tinylog简介 tinylog,与其他各种tiny开头的东西一样,是一个轻量级的开源日志解决方案.它本身只包含两个JAR文件(一个用于API,另一个用于实现),没有任何外部依赖关系.两个JAR文件 ...

  3. 降维处理PCA

    要理解什么是降维,书上给出了一个很好但是有点抽象的例子. 说,看电视的时候屏幕上有成百上千万的像素点,那么其实每个画面都是一个上千万维度的数据:但是我们在观看的时候大脑自动把电视里面的场景放在我们所能 ...

  4. Note -「单位根反演」学习笔记

    \(\mathcal{Preface}\)   单位根反演,顾名思义就是用单位根变换一类式子的形式.有关单位根的基本概念可见我的这篇博客. \(\mathcal{Formula}\)   单位根反演的 ...

  5. 企业必读:BI数据可视化工具选型

    伴随着大数据时代的到来,企业对数据的需求从"IT主导的报表模式"转向"业务主导的自助分析模式",可视化BI工具也随之应运而生.面对如此众多的可视化BI工具,我们 ...

  6. ASP.NET Core 6框架揭秘实例演示[14]:日志的进阶用法

    为了对各种日志框架进行整合,微软创建了一个用来提供统一的日志编程模式的日志框架.<日志的基本编程模式>以实例演示的方式介绍了日志的基本编程模式,现在我们来补充几种"进阶" ...

  7. 【C# 线程】线程池 epoll和IOCP之比较

    总结:IOCP :我的打印文件放在店里面排队,轮到我打印了,店长帮我打印一下,打印好了通知我来拿 Epoll  :我的打印文件放在店里面排队,轮到我叫我一下,我自己来打印. 直入正题:Epoll 是L ...

  8. 【C# 线程】线程池 ThreadPool

    Overview    如今的应用程序越来越复杂,我们常常需要使用<异步编程:线程概述及使用>中提到的多线程技术来提高应用程序的响应速度.这时我们频繁的创建和销毁线程来让应用程序快速响应操 ...

  9. 激活visio pro 2019

    内容来源:http://www.yishimei.cn/catalog.asp?page=2 1.必须彻底关闭windows defender 防火墙 :光笔防火墙的教程:https://www.cn ...

  10. 调用WCF服务的几种方式

    首先发布了一个名为PersonService的WCF服务.服务契约如下: [ServiceContract]     public interface IPersonService     {     ...