1.Python面向对象编程OOP(Object Oriented Programming)

封装:可以隐藏实现细节,使代码模块化

继承:可以扩展已存在的代码模块,可以使代码实现重用

多态:一种接口,多种实现,实现接口重用,为了类在继承和派生的时候,保证家谱中任一类的实例的某一属性的正确调用。

python不支持多态,但可以间接实现。

  1. # 新式类与经典类的差别主要在多继承的顺序问题
  2. # class People: #经典类的写法
  3. class People(object): # 新式类的写法
  4. cn="中国"#类变量,大家公共的属性,节省内存开销
  5. def __init__(self,name,age):#构造函数,在实例化时做一些类的初始化的工作
  6. self.name=name#实例变量(静态变量),作用域就是实例本身
  7. self.age=age
  8. self.lover=[]
  9.  
  10. def eat(self):#类的方法,功能(动态属性)
  11. print("%s is eating......"%self.name)
  12.  
  13. def sleep(self):
  14. print("%s is sleeping.... "%self.name)
  15.  
  16. def __del__(self):#析构函数:在实例释放、销毁的时候自动执行,通常用于做一些收尾的工作,如关闭一些数据库连接,打开的临时文件
  17. print("deleting %s"%self.name)
  18.  
  19. class Animal(object):
  20. def walk(self):
  21. print('%s is able to walk.'%self.name)
  22. def make_love(self,obj):
  23. print('%s is making love with %s'%(self.name,obj.name))
  24. self.lover.append(obj)
  25.  
  26. # python中可以实现多继承,先后继承的还是有顺序的
  27. class Man(People,Animal):
  28. def __init__(self,name,age,property,education):#子类中重构父类的构造方法
  29. # People.__init__(self,name,age,education)
  30. super(Man,self).__init__(name,age)#这是新式类的写法,两种写法都可以的,下面这种更好,
  31. self.property=property
  32. self.__education=education#私有属性,定义时用__property样式,
  33. print('%s一出生就拥有%d元'%(self.name,self.property))
  34.  
  35. # 定义一个显示教育信息的方法
  36. def show_edu(self):
  37. print("%s education :%s"%(self.name,self.__education))
  38.  
  39. def runfast(self):#在子类中添加新的方法
  40. print("%s is running fast...."%self.name)
  41. def sleep(self):
  42. People.sleep(self)#执行父类的方法
  43. print("Man is sleeping,,,,,")#添加新的功能
  44.  
  45. class Woman(People,Animal):
  46. def born(self):
  47. print("%s is borning a baby,,,,"%self.name)
  48.  
  49. m1=Man("Jack",22,10000,"大学本科")
  50. #print(m1.__education)#会报错,私有属性不能这么访问,
  51. m1.show_edu()#通过函数进行访问
  52. m1.sleep()
  53.  
  54. w1=Woman("Rose",18)
  55. w1.sleep()
  56. m1.make_love(w1)
  57. w1.name='Roseenrr'
  58. print('%s has lover : %s'%(m1.name,m1.lover[0].name))
  59. w1.born()

面向对象

  1. #python2.x中多继承:经典类按深度优先继承,新式类按广度优先继承的
  2. #python3.x中多继承:都统一采用的广度优先继承
  3. #多继承实例,B,C继承A,D继承B、C
  4. class A(object):
  5. # pass
  6. def __init__(self):
  7. print("A")
  8. class B(A):
  9. # pass
  10. def __init__(self):
  11. print('B')
  12. class C(A):
  13. # pass
  14. def __init__(self):
  15. print("C")
  16. class D(B,C):
  17. # pass
  18. def __init__(self):
  19. print("D")
  20.  
  21. d1=D()#构造函数__init__()只构造一次,搜索顺序:D自身-->B--->C--->A

多继承

  1. class School(object):
  2. def __init__(self,name,addr):
  3. self.name=name
  4. self.addr=addr
  5. self.students=[]
  6. self.teachers=[]
  7.  
  8. def enroll(self,stu_obj):
  9. print("正在为学员%s办理入学注册手续"%stu_obj.name)
  10. self.students.append(stu_obj)
  11.  
  12. def hire(self,staff_obj):
  13. print("雇佣新的教职工:%s"%staff_obj.name)
  14. self.teachers.append(staff_obj)
  15.  
  16. class SchoolMember(object):
  17. def __init__(self,name,age,sex,):
  18. self.name=name
  19. self.age=age
  20. self.sex=sex
  21. def tell(self):
  22. pass
  23.  
  24. class Teacher(SchoolMember):
  25. def __init__(self,name,age,sex,salary,course):
  26. super(Teacher,self).__init__(name,age,sex)
  27. self.salary=salary
  28. self.course=course
  29. def tell(self):
  30. print('''-----info of Teacher:%s---------
  31. Name:%s
  32. Age:%s
  33. Sex:%s
  34. Salary:%s
  35. Course:%s
  36. '''%(self.name,self.name,self.age,self.sex,self.salary,self.course))
  37. def teach(self):
  38. print("%s is teaching course:%s"%(self.name,self.course))
  39.  
  40. class Student(SchoolMember):
  41. def __init__(self,name,age,sex,stu_id,grade):
  42. super(Student,self).__init__(name,age,sex)
  43. self.stu_id=stu_id
  44. self.grade=grade
  45. def tell(self):
  46. print('''-----info of Student:%s---------
  47. Name:%s
  48. Age:%s
  49. Sex:%s
  50. Stu_id:%s
  51. Grade:%s
  52. '''%(self.name,self.name,self.age,self.sex,self.stu_id,self.grade))
  53. def pay_tuition(self,amount):
  54. print('%s 缴费了 %s元'%(self.name,amount))
  55. # 对象实例化
  56. school=School("SMU","Shanghai")
  57.  
  58. teacher1=Teacher("Jackson",48,'M',15000,"C语言")
  59. teacher2=Teacher("Jack",55,'M',18000,"python语言编程")
  60.  
  61. s1=Student("Jean",22,'M',2017001,"2班")
  62. s2=Student("Alice",18,'F',2017002,"1班")
  63.  
  64. s1.tell()
  65. s2.tell()
  66. school.hire(teacher1)
  67. school.hire(teacher2)
  68. school.enroll(s1)
  69. school.enroll(s2)
  70. print(school.students)
  71. print(school.teachers)
  72.  
  73. school.teachers[0].teach()
  74. for stu in school.students:
  75. stu.pay_tuition(5000)

View code

  1. #多态的实例
  2. class Animal(object):
  3. def __init__(self,name):
  4. self.name=name
  5.  
  6. def howl(self):
  7. pass
  8. #实现多态的方法
  9. @staticmethod
  10. def animal_howl(obj):
  11. obj.howl()
  12.  
  13. class Cat(Animal):
  14. def howl(self):
  15. print("Meow,Meow...")
  16.  
  17. class Dog(Animal):
  18. def howl(self):
  19. print("WOw,Wow,Wow")
  20. c=Cat("Tom")
  21. d=Dog("Wory")
  22.  
  23. Animal.animal_howl(c)#同样的方法,传入不同的对象,执行不同的方法
  24. Animal.animal_howl(d)

多态

第六周 day6 python学习笔记的更多相关文章

  1. 20145330第六周《Java学习笔记》

    20145330第六周<Java学习笔记> . 这周算是很忙碌的一周.因为第六周陆续很多实验都开始进行,开始要准备和预习的科目日渐增多,对Java分配的时间不知不觉就减少了,然而第十和十一 ...

  2. 第五周 day5 python学习笔记

    1.软件开发的常规目录结构 更加详细信息参考博客:http://www.cnblogs.com/alex3714/articles/5765046.html         2.python中的模块 ...

  3. 第三周 day3 python学习笔记

    1.字符串str类型,不支持修改. 2.关于集合的学习: (1)将列表转成集合set:集合(set)是无序的,集合中不会出现重复元素--互不相同 (2)集合的操作:交集,并集.差集.对称差集.父集.子 ...

  4. 第二周 day2 python学习笔记

    1. python中的三元运算: result=value1 if 条件 else value2 如果条件成立,result=value1 如果条件不成立,result=value2 2. pytho ...

  5. 第一周 day1 Python学习笔记

    为什么要学习Python? Python擅长的领域 1. python2.x中不支持中文编码,默认编码格式为ASCII码,而python3.x中支持Unicode编码,支持中文,变量名可以为中文,如: ...

  6. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  7. Python学习笔记(六)

    Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...

  8. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  9. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

随机推荐

  1. Druid SQL 解析器概览

    概览 Druid 的官方 wiki 对 SQL 解析器部分的讲解内容并不多,但虽然不多,也有利于完全没接触过 Druid 的人对 SQL 解析器有个初步的印象. 说到解析器,脑海里便很容易浮现 par ...

  2. 记一次走心One 2 One沟通

    聊的比较零零碎碎,内容比较散,有些solution不错,记一些要点吧(1)要学会汇报,就是坐你身边的人,也未必知道你在干啥 三个人都在砌墙.当人们分别问他们在做什么,他们的答案却不一样:第一个人头也没 ...

  3. vue中添加favicon.ico

    1.首先将favicon.ico图片放在根目录下 2.修改webpack配置文件 1)找到build下的webpack.dev.conf.js文件 new HtmlWebpackPlugin({ fi ...

  4. meteor框架学习

    meteor js的全栈开发框架,官方的解释: Meteor makes it an order of magnitude simpler, and a lot more fun. You can b ...

  5. webpack使用extract-text-webpack-plugin打包时提示错误Use Chunks.groupsIterable and filter by instanceof Entryp

    转自:https://blog.csdn.net/gezilan/article/details/80020417 前提条件: 当前时间是2018年4月20日. webpack的最新版本为是 v4.6 ...

  6. Linux必会必知

    一.前言 Linux作为一个开源系统,被极客极力推崇,作为程序员不来了解一下,那就亏了 Linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次 ...

  7. zoj 3524(拓扑排序+多重背包)(好题)

    http://blog.csdn.net/woshi250hua/article/details/7824773 题目大意:从前有n座山,山里都有一座庙,庙里都有一个老和尚,老和尚专送纪念品,每个纪念 ...

  8. mysql的with rollup

    无意间发现了mysql的with rollup函数(用在group by 函数后面) 测试 1. SELECT NAME,DATE,score FROM stu 结果是 2. SELECT NAME, ...

  9. CSS的伪类 :before 和 :after

    CSS 有两个说不上常用的伪类 :before 和 :after,偶尔会被人用来添加些自定义格式什么的,但是它们的功用不仅于此.前几天发现了 Creative Link Effects 这个非常有意思 ...

  10. MYSQL数据库索引类型及使用

    MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与组合索引,这里对这些索引的做一些简单描述: (1)普通索引 这是最基本的MySQL数据库索引,它没有任何限制.它有以下几种创建方式: 创建索引 ...