http://www.cnblogs.com/alex3714/articles/5188179.html

====================生活中====================

世界万物,皆可分类

世界万物,皆为对象

只要是对象:肯定属于某种品类

只要是对象:肯定有属性

================================================

大纲:

面向对象:特性

核心:Class:类

   Object:对象

特性:继承:Inheritance :便于程序的扩展,同时减少大量冗余代码

      封装:Encapsulation:隐藏实现细节

      多态性:polymorphism :一个接口多个实现,在继承、派生时候

继承特性

类的 封装

构造函数:向类的方法传值使用。

格式:def __init__(self,变量名1,变量名2,变量名3....):

      self.内部变量名a = 变量名1  

      self.内部变量名b = 变量名2

      self.内部变量名c = 变量名3                        

析构函数:双下划线开始和结束,在被实例化的实例被删除的时候自动执行:如本例的__del__()

私有类变量:当只有在类内部才可以被调用,定义格式为双下滑线开始:如本例:self.__life_value = life_value

私有方法:当只有在类内部才可以被调用,定义格式为双下滑线开始:如本例:def __selffunc(self):

类的重构:对父类构造函数重构用于:子类中需加入新的参数时使用【本例子类Man中比父类多了money实例变量】

继承多类

 经典类和新式儿类的区别:主要体现在多类的继承

类的继承搜索方式(策略):

      一:广度优先:Python3默认(不区分经典类和新式类)

      二:深度优先:Python 2里面经典类使用的继承方式,新式类使用广度优先继承方式

本图:广度优先:当子类D实例化时,优先在B或者C找 构造函数__init__(self,变量名...)找不到再想上A那里找。

  

类的继承应用:学校,学校成员(教师、学生)

一个学校类

学校成员类

  教师子类、学生子类

目标:学校类功能:学校名字、地址、招聘教师,收学生

    成员类功能:都有名字、年龄、性别等成员共同属性。

    教师子类:继承成员类功能,增加教学功能、工资、所教课程种类、

    学生子类:继承成员类功能,增加学习功能、班级、所学课程种类、

  实例化多个学生和老师,学校进行招聘,和开课。学校里面的信息更新,和查看。

  1. class School(object):
  2. '''学校共有属性'''
  3. def __init__(self,name,addr):
  4. self.name = name
  5. self.addr = addr
  6. self.students = []
  7. self.staffs = []
  8. def enroll(self,stu_obj):
  9. print('为学员:%s 办理注册手续'% stu_obj.name)
  10. self.students.append(stu_obj)
  11. def hire(self,staff_obj):
  12. print('hire teacher :%s'% staff_obj.name)
  13. self.staffs.append(staff_obj)
  14. class School_Member(object):
  15. '''成员共有属性'''
  16. def __init__(self,name,age,sex):
  17. self.name = name
  18. self.age = age
  19. self.sex = sex
  20. def tell(self):
  21. pass
  22. class Teacher(School_Member):
  23. '''老师独有属性'''
  24. def __init__(self,name,age,sex,salary,coures):
  25. super(Teacher,self).__init__(name,age,sex)
  26. self.salary = salary
  27. self.coures = coures
  28. def tell(self):
  29. print("""
  30. ==========info Teacher:%s =========
  31. name:%s
  32. age:%d
  33. sex:%s
  34. salary:%d
  35. coures:%s
  36. """%(self.name,self.name,self.age,self.sex,self.salary,self.coures))
  37. class Student(School_Member):
  38. '''学生独有属性'''
  39. def __init__(self,name,age,sex,stu_id,grade):
  40. super(Student,self).__init__(name,age,sex)
  41. self.stu_id = stu_id
  42. self.grade = grade
  43. def tell(self):
  44. print("""
  45. ==========info Student:%s =========
  46. name:%s
  47. age:%d
  48. sex:%s
  49. stu_id:%s
  50. grade:%s
  51. """%(self.name,self.name,self.age,self.sex,self.stu_id,self.grade))
  52. t1 = Teacher('zhangmingda',22,'Man',15000,'python')
  53. t2 = Teacher('zhangmingda2',23,'Man',18000,'Linux')
  54. s1 = Student('qjj',24,'Girl',10001,'python')
  55. s2 = Student('qjj2',25,'Girl',10002,'Linux')
  56. school1 = School('隆化职中','下洼子')
  57. school1.enroll(s1)
  58. school1.enroll(s2)
  59. school1.hire(t1)
  60. school1.hire(t2)
  61. school1.students[0].tell()
  62. school1.students[1].tell()
  63. school1.staffs[0].tell()

见代码

多态特性:一个接口多种实现

  1. class Animal(object):
  2. def __init__(self,name):
  3. self.name = name
  4. def talk(self):
  5. '''如果直接用动物实例化一个名字,就断言为异常抛出,必须从动物子类实例一个动物'''
  6. raise NotImplementedError("Subclass must implement abstract method")
  7.  
  8. class Make_dog(Animal):
  9. def talk(self):
  10. print('%s talking: 汪汪汪.....'% self.name)
  11. class Make_cat(Animal):
  12. def talk(self):
  13. print('%s talking: 喵喵喵.....' % self.name)
  14. def please_talk(obj):
  15. obj.talk()
  16. d1 = Make_dog('李亮')
  17. c1 = Make_cat('赵新新')
  18. please_talk(d1)
  19. please_talk(c1)
  1. 李亮 talking: 汪汪汪.....
  2. 赵新新 talking: 喵喵喵.....

 在父类中实现一个接口多种实现(正常多态)

  1. class Animal(object):
  2. def __init__(self,name):
  3. self.name = name
  4. def talk(self):
  5. '''如果直接用动物实例化一个名字,就断言为异常抛出,必须从动物子类实例一个动物'''
  6. raise NotImplementedError("Subclass must implement abstract method")
  7. @staticmethod
  8. def animal_talk(obj):
  9. '''在父类通过统一的接口,实现不同子类的统一功能调用,增强代码复用'''
  10. obj.talk()
  11.  
  12. class Make_dog(Animal):
  13. def talk(self):
  14. print('%s talking: 汪汪汪.....'% self.name)
  15. class Make_cat(Animal):
  16. def talk(self):
  17. print('%s talking: 喵喵喵.....' % self.name)
  18.  
  19. d1 = Make_dog('李亮')
  20. c1 = Make_cat('赵新新')
  21. Animal.animal_talk(d1)
  22. Animal.animal_talk(c1)
  1. 李亮 talking: 汪汪汪.....
  2. 赵新新 talking: 喵喵喵.....

  

Python3 day6面向对象的更多相关文章

  1. [Python3] 024 面向对象 第四弹

    目录 11. 类和对象的三种方法 12. 抽象类 12.1 抽象方法 12.2 抽象类 12.3 抽象类的使用 13. 自定义类 接上一篇 [Python3] 023 面向对象 第三弹 11. 类和对 ...

  2. [Python3] 023 面向对象 第三弹

    目录 7. 类相关函数 8. 类的成员描述符(属性) 9. 类的内置属性 10. 类的常用魔术方法 10.1 操作类 10.2 描述符 10.3 属性操作 10.4 运算分类相关魔术方法 接上一篇 [ ...

  3. [Python3] 022 面向对象 第二弹

    目录 6. 面向对象的三大特性 6.1 封装 6.1.1 私有 private 6.1.2 受保护 protected 6.1.3 公开 public 6.2 继承 6.2.1 继承的概念与作用 6. ...

  4. (转)Python之路,Day6 - 面向对象学习

    本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...

  5. Python3中面向对象 OOP

    Python3中面向对象 OOP 定义: python中通过关键字 class 实现类的定义: class ClassName(object): pass 获取成员变量:ClassName.变量名 修 ...

  6. day6 - 面向对象学习

    面向对象介绍 特性 class object 封装 继承 https://segmentfault.com/a/1190000002685939 python2 经典类是按照深度优先来继承的:新式类是 ...

  7. 【Python3之面向对象的程序设计】

    一.面向对象的程序设计的由来 1.第一阶段:面向机器,1940年以前 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数据. 简单来说,就是直接编写 0 和 1 ...

  8. python3之面向对象

    1.面向对象术语 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类属性(类变量):类属性在整个实例化的对象中是公用的.类属 ...

  9. 转:Python之路,Day6 - 面向对象学习

    这篇文章写的不错,转来收了 转自:http://www.cnblogs.com/alex3714/articles/5188179.html   本节内容:   面向对象编程介绍 为什么要用面向对象进 ...

随机推荐

  1. 深入了解SpringMVC源码解析

    Spring MVC源码解析 Spring MVC的使用原理其实是通过配置一个Servlet来接管所有的请求,所有的请求由这个Servlet来进行分发处理. 我们可以从web.xml里面看出这一点 & ...

  2. MYSQL免安装

    MYSQL免安装 本文使用mysql 8.0.22进行演示 一.MYSQL 下载 [x] 官网下载:地址:https://dev.mysql.com/downloads/mysql/ [x] 百度云盘 ...

  3. java 代理模式实现代码

    目录 1.静态代理 2.动态代理 1.静态代理 接口类AdminService.java接口 public interface AdminService { void update(); Object ...

  4. 洛谷 P3214 - [HNOI2011]卡农(线性 dp)

    洛谷题面传送门 又是一道我不会的代码超短的题( 一开始想着用生成函数搞,结果怎么都搞不粗来/ll 首先不妨假设音阶之间存在顺序关系,最终答案除以 \(m!\) 即可. 本题个人认为一个比较亮的地方在于 ...

  5. 洛谷 P4755 - Beautiful Pair(主席树+分治+启发式优化)

    题面传送门 wssb,我紫菜 看到这类与最大值统计有关的问题可以很自然地想到分治,考虑对 \([l,r]\) 进行分治,求出对于所有 \(l\le x\le y\le r\) 的点对 \((x,y)\ ...

  6. Codeforces 1476G - Minimum Difference(带修莫队+根号平衡)

    Codeforces 题目传送门 & 洛谷题目传送门 震惊!我竟然独立切掉了这道 *3100 的题! 虽然此题难度的确虚高,感觉真实评分也就 2800~2900 罢.但感觉还是挺有成就感的( ...

  7. P3571 [POI2014]SUP-Supercomputer

    *X. P3571 [POI2014]SUP-Supercomputer 题意简述:一棵以 \(1\) 为根的树.\(q\) 次询问,每次给出 \(k\),求至少要多少次同时访问不超过 \(k\) 次 ...

  8. Anaconda建立新的环境,出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url ...... 解决过程

    2020.3.7准备scrapy,使用anaconda创建一个新的环境,执行"conda create -n scrapyEnv python=3.6",结果出现了"Co ...

  9. Oracle-一张表中增加计算某列值重复的次数列,并且把表中其他列也显示出来,或者在显示过程中做一些过滤

    总结: 1.计算某列值(数值or字符串)重复的次数 select 列1,count( 列1 or *) count1  from table1 group by 列1 输出的表为:第一列是保留唯一值的 ...

  10. A Child's History of England.17

    CHAPTER 6 ENGLAND UNDER HAROLD HAREFOOT, HARDICANUTE, AND EDWARD THE CONFESSOR Canute left three son ...