今日内容详细

动态方法与静态方法

动态方法

绑定给对象的方法

  1. class Student:
  2. def run(self):
  3. print(self)
  4. obj1 = Student()
  5. # 类调用绑定给对象的方法:有几个参数就需要传几个参数
  6. Student.run(123)
  7. # 对象调用绑定给对象的方法:会自动将对象当做第一个参数传入
  8. obj1.run()

绑定给类的方法

  1. class Student:
  2. @classmethod
  3. def eat(cls):
  4. print(cls)
  5. # 类调用绑定给类的方法:会自动将类当做第一个参数传入
  6. obj1 = Student()
  7. print(Student) # <class '__main__.Student'>
  8. Student.eat() # <class '__main__.Student'>
  9. # 对象调用绑定给类的方法:也不需要传参 会讲产生该对象的类自动当做第一个参数传入
  10. obj1.eat() # <class '__main__.Student'>

静态方法

  1. class Student:
  2. @staticmethod
  3. def speak(a):
  4. print(a)
  5. # 普普通通的函数:无论谁来调 都必须传固定的参数个数
  6. # 类调用静态方法:要自己传值
  7. Student.speak(123)
  8. # 对象调用静态方法:要自己传值
  9. obj1.speak(321)

继承

面向对象的三大特性之一

面向对象有三大特性有继承、封装、多态,其中最重要的就是继承

继承的含义

  1. 面向对象中继承则是用来描述类与类之间数据的从属关系
  2. eg:类A继承了类B 那么类A就可以使用类B中所有的数据(数据、功能...)

继承的目的

  1. 面向对象中通过继承可以减少代码冗余 提升开发效率 同样也支持多继承
  2. eg:类A可以继承多个类同时拥有多个类里面的代码使用权

继承的基本使用

  1. """
  2. class A(B):
  3. pass
  4. 我们将被继承的类称为:父类或者基类 B
  5. 继承别人的类称为:子类或者派生类 A
  6. """
  7. python中一个类可以同时继承多个父类
  8. class A(B,C,D):
  9. pass

继承的本质

要找出类与类之间的继承关系,需要先抽象在继承。

  1. 抽象:由下往上抽取相同特征,总结类与类之间的相似之处就可以得到父类
  2. 继承:由上往下直接白嫖资源(基于抽象结果就能找到继承关系)
  3. """
  4. 在面向对象编程中 其实类和父类的主要功能都是用来减少代码冗余的
  5. 对象:数据与功能的结合体
  6. 类:多个对象相同数据和功能的结合体
  7. 父类:多个类相同数据和功能的结合体
  8. """
  9. class Person:
  10. def __init__(self, name, age, gender):
  11. self.name = name
  12. self.age = age
  13. self.gender = gender
  14. class Teacher(Person):
  15. def teach(self):
  16. print(f'{self.name}老师正在讲课')
  17. class Student(Person):
  18. def study(self):
  19. print(f'{self.name}学生正在学习')
  20. stu1 = Student('jason', 18, 'male')

名字的查找顺序

名字的查找顺序永远都是 先从当前对象自身开始查找

不继承的情况下

  1. 名字的查找顺序是
  2. 先从对象自己的名称空间中查找,没有则去类里面的名称空间查找
  3. 对象 >>>
  4. '''注意设置值的情况下是在自身的名称空间中添加或者修改数据'''

单继承的情况下

  1. 名字的查找顺序是
  2. 先从对象自己的名称空间中查找,没有择取产生对象的类中查找
  3. 如果还没有并且类有父类则去父类中查找,以此往复下去
  4. 对象 >>> >>> 父类
  5. 经典案例
  6. class A:
  7. def f1(self):
  8. print('from A.f1')
  9. def f2(self):
  10. print('from A.f2')
  11. self.f1() '''以后看到self点东西 一定要问自己self是谁'''
  12. class MyClass(A):
  13. def f1(self):
  14. print('from MyClass.f1')
  15. obj = MyClass()
  16. obj.f2()
  17. # 执行的方法分别是A里面的f2和MyClass里面的f1

多继承的情况下

  1. """
  2. 在python2中存在经典类与新式类
  3. 在python3中只有新式类
  4. 区分的关键在于是否继承了一个默认的object类
  5. 新式类:直接或者间接继承了object或者其子类的类
  6. 经典类:不继承任何的类
  7. """
  8. class A:
  9. pass
  10. # print A.__bases__ # 空的
  11. # print(A.__bases__) # (<class 'object'>,)
  12. """
  13. 有时候我们在定义类的时候会习惯性的写
  14. class MyClass(object):
  15. pass
  16. 为了兼容python2和python3
  17. """

研究菱形和非菱形问题object不参与图形构建

  1. 非菱形继承的情况下
  2. 父类中名字的查找顺序就是按照继承时从左往右依次查找
  3. 如果多个父类还有分类 那么遵循"深度优先"
  4. ADBECF
  5. 菱形继承的情况下
  6. 父类中名字的查找顺序就是按照继承时从左往右依次查找
  7. 如果多个父类还有分类 那么遵循"广度优先"
  8. ADBECFM

派生类

  1. class Person:
  2. def __init__(self,name,age,gender):
  3. self.name = name
  4. self.age = age
  5. self.gender = gender
  6. class Teacher(Person):
  7. def __init__(self,name,age,gender,level,salary):
  8. # 用了Person类里面的__init__方法之后
  9. # super(Teacher,self).__init__(name,age,gender) # 子类调用父类的方法 完整语法
  10. super().__init__(name,age,gender) # 子类调用父类的方法 精简语法
  11. # 自己还要添加一个额外的东西
  12. self.level = level
  13. self.salary = salary
  14. class Student(Person):
  15. def __init__(self,name,age,gender,stu_id,class_id):
  16. # 用了Person类里面的__init__方法之后
  17. super().__init__(name, age, gender)
  18. # 自己还要添加一个额外的东西
  19. self.stu_id = stu_id
  20. self.class_id = class_id
  21. """
  22. 如果自己写的子类需要使用父类的方法 并且还需要基于该方法做扩展
  23. 这样的子类我们称之为派生类(本质还是子类)
  24. 那么可以使用super关键字来实现
  25. """
  26. t1 = Teacher('jason',18,'male','满级',3.1)
  27. s1 = Student('kevin',28,'female',1302010201,2)
  28. print(t1.__dict__)
  29. print(s1.__dict__)

派生功能前瞻

  1. class MyClass(list):
  2. def append(self,args):
  3. if args == 123:
  4. print('数字123不能追加')
  5. return
  6. super(MyClass, self).append(args)
  7. obj1 = MyClass()
  8. obj1.append(333)
  9. obj1.append(222)
  10. obj1.append(123)
  11. print(obj1)

python学习-Day27的更多相关文章

  1. python学习博客地址集合。。。

    python学习博客地址集合...   老师讲课博客目录 http://www.bootcdn.cn/bootstrap/  bootstrap cdn在线地址 http://www.cnblogs. ...

  2. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  3. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  4. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  5. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  6. python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

  7. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  8. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  9. [Python] 学习资料汇总

    Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...

随机推荐

  1. Java基础 - 异常详解

    异常的层次结构 Throwable Throwable 是 Java 语言中所有错误与异常的超类. Throwable 包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示 ...

  2. C#XmlHelper帮助类操作Xml文档的通用方法汇总

    前言 该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法(主要包括Xml序列化和反序列化,Xml文件读取,Xml文档节点内 ...

  3. ElasticSearch7.3学习(十五)----中文分词器(IK Analyzer)及自定义词库

    1. 中文分词器 1.1 默认分词器 先来看看ElasticSearch中默认的standard 分词器,对英文比较友好,但是对于中文来说就是按照字符拆分,不是那么友好. GET /_analyze ...

  4. 怎样查看一个 linux 命令的概要与用法?假设你在/bin 目录中偶然看到一个你从没见过的的命令,怎样才能知道它的作用和用法呢?

    使用命令 whatis 可以先出显示出这个命令的用法简要,比如,你可以使用 whatiszcat 去查看'zcat'的介绍以及使用简要. [root@localhost ~]# whatis zcat ...

  5. Effective Java —— 覆盖equals时遵守通用约定

    本文参考 本篇文章参考自<Effective Java>第三版第十条"Obey the general contract when overriding equals" ...

  6. (原创)[C#] 一步一步自定义拖拽(Drag&Drop)时的鼠标效果:(一)基本原理及基本实现

    一.前言 拖拽(Drag&Drop),属于是极其常用的基础功能. 无论是在系统上.应用上.还是在网页上,拖拽随处可见.同时拖拽时的鼠标效果也很漂亮,像这样: 这样: 还有这样: 等等等等. 这 ...

  7. TOP 10 开源的推荐系统简介

      最 近这两年推荐系统特别火,本文搜集整理了一些比较好的开源推荐系统,即有轻量级的适用于做研究的SVDFeature.LibMF.LibFM等,也有重 量级的适用于工业系统的 Mahout.Oryx ...

  8. Pandas查询数据的几种方法

    Pandas查询数据 Pandas查询数据的几种方法 df.loc方法,根据行.列的标签值查询 df.iloc方法,根据行.列的数字位置查询 df.where方法 df.query方法 .loc既能查 ...

  9. 要多简单就有多简单的H5拍照加水印

    来一个简单粗暴的gif演示图 先来html 内容 <video id="video" width="320" height="240" ...

  10. nginx之配置文件公用抽取

    nginx之配置文件公用抽取 因为某些原因,需要同时部署同一应用两个不同分支的代码,而配置文件存在较大重复,因此有此篇. 最近构建的过程中遇到了一些跟nginx配置相关的问题,记录下. 简单说下构建的 ...