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. 为hade增加model自动生成功能

    大家好,我是轩脉刃. 我们写业务的时候和db接触是少不了的,那么要生成model也是少不了的,如何自动生成model,想着要给hade框架增加个这样的命令. 看了下网上的几个开源项目,最终聚焦在两个项 ...

  2. Solution -「SHOI2016」「洛谷 P4336」黑暗前的幻想乡

    \(\mathcal{Description}\)   link.   有一个 \(n\) 个结点的无向图,给定 \(n-1\) 组边集,求从每组边集选出恰一条边最终构成树的方案树.对 \(10^9+ ...

  3. Solution -「AGC 002F」「AT 2000」Leftmost Ball

    \(\mathcal{Description}\)   Link.   给你 \(n\) 种颜色的球,每个球有 \(k\) 个,把这 \(n\times k\) 个球排成一排,把每一种颜色的最左边出现 ...

  4. Solution -「LOCAL」「cov. HDU 6816」折纸游戏

    \(\mathcal{Description}\)   Link(削弱版).   \(n\) 张纸叠在一起对折 \(k\) 次,然后从上到下为每层的正反两面写上数字,求把纸重新摊平后每张纸上的数字序列 ...

  5. SSM整合时页面出现$ is not defined

    $ is not defined ,有以下几种可能: 1.没有导入jQuery的jar包 2.jQuery的jar包放进了WEB-INF里,jQuery的jar包最好放在WebContent下,跟WE ...

  6. 如何基于gRPC沟通微服务框架

    本文我们来讲解一下如何使用 gRPC构建微服务,gRPC是一个开源框架,可用于构建可扩展且高性能的微服务并创建服务之间的通信. 背景 随着企业越来越多地转向微服务,对构建这些微服务的低延迟和可扩展框架 ...

  7. 【测试必备】k8s基本使用(更新中。。。)

    测试为什么要学习容器技术及k8s k8s不是运维的专属技术 随着互联网技术的发展,架构也已经从单体架构发展到容器云( "微服务 + k8s" 完美结合) 很多人认为,k8s只是运维 ...

  8. (二)scrapy 中如何自定义 pipeline 下载图片

    这里以一个很简单的小爬虫为例,爬取 壹心理 网站的阅读页面第一页的所有文章及其对应的图片,文章页面如下: 创建项目 首先新建一个 scrapy 项目,安装好相关依赖(步骤可参考:scrapy 安装及新 ...

  9. [旧][Android] Retrofit 初步使用

    备注 原发表于2016.04.13,资料已过时,仅作备份,谨慎参考 Retrofit 是什么? Retrofit is a type-safe HTTP client for Android and ...

  10. 白话OAuth2.0

     一.OAuth是什么 OAuth简写:Open Authorization(开放授权).百度百科上是这么说的:为用户资源提供了一个安全,开放而又简易的标准.解决了密码的反模式问题(第三方应用不需要知 ...