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那里找。

  

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

一个学校类

学校成员类

  教师子类、学生子类

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

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

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

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

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

class School(object):
'''学校共有属性'''
def __init__(self,name,addr):
self.name = name
self.addr = addr
self.students = []
self.staffs = []
def enroll(self,stu_obj):
print('为学员:%s 办理注册手续'% stu_obj.name)
self.students.append(stu_obj)
def hire(self,staff_obj):
print('hire teacher :%s'% staff_obj.name)
self.staffs.append(staff_obj)
class School_Member(object):
'''成员共有属性'''
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def tell(self):
pass
class Teacher(School_Member):
'''老师独有属性'''
def __init__(self,name,age,sex,salary,coures):
super(Teacher,self).__init__(name,age,sex)
self.salary = salary
self.coures = coures
def tell(self):
print("""
==========info Teacher:%s =========
name:%s
age:%d
sex:%s
salary:%d
coures:%s
"""%(self.name,self.name,self.age,self.sex,self.salary,self.coures))
class Student(School_Member):
'''学生独有属性'''
def __init__(self,name,age,sex,stu_id,grade):
super(Student,self).__init__(name,age,sex)
self.stu_id = stu_id
self.grade = grade
def tell(self):
print("""
==========info Student:%s =========
name:%s
age:%d
sex:%s
stu_id:%s
grade:%s
"""%(self.name,self.name,self.age,self.sex,self.stu_id,self.grade))
t1 = Teacher('zhangmingda',22,'Man',15000,'python')
t2 = Teacher('zhangmingda2',23,'Man',18000,'Linux')
s1 = Student('qjj',24,'Girl',10001,'python')
s2 = Student('qjj2',25,'Girl',10002,'Linux')
school1 = School('隆化职中','下洼子')
school1.enroll(s1)
school1.enroll(s2)
school1.hire(t1)
school1.hire(t2)
school1.students[0].tell()
school1.students[1].tell()
school1.staffs[0].tell()

见代码

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

class Animal(object):
def __init__(self,name):
self.name = name
def talk(self):
'''如果直接用动物实例化一个名字,就断言为异常抛出,必须从动物子类实例一个动物'''
raise NotImplementedError("Subclass must implement abstract method") class Make_dog(Animal):
def talk(self):
print('%s talking: 汪汪汪.....'% self.name)
class Make_cat(Animal):
def talk(self):
print('%s talking: 喵喵喵.....' % self.name)
def please_talk(obj):
obj.talk()
d1 = Make_dog('李亮')
c1 = Make_cat('赵新新')
please_talk(d1)
please_talk(c1)
李亮 talking: 汪汪汪.....
赵新新 talking: 喵喵喵.....

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

class Animal(object):
def __init__(self,name):
self.name = name
def talk(self):
'''如果直接用动物实例化一个名字,就断言为异常抛出,必须从动物子类实例一个动物'''
raise NotImplementedError("Subclass must implement abstract method")
@staticmethod
def animal_talk(obj):
'''在父类通过统一的接口,实现不同子类的统一功能调用,增强代码复用'''
obj.talk() class Make_dog(Animal):
def talk(self):
print('%s talking: 汪汪汪.....'% self.name)
class Make_cat(Animal):
def talk(self):
print('%s talking: 喵喵喵.....' % self.name) d1 = Make_dog('李亮')
c1 = Make_cat('赵新新')
Animal.animal_talk(d1)
Animal.animal_talk(c1)
李亮 talking: 汪汪汪.....
赵新新 talking: 喵喵喵.....

  

最新文章

  1. Huffman树进行编码和译码
  2. SharePoint 2013 Search REST API 使用示例
  3. MySQL初始配置
  4. Git学习笔记(一)
  5. 【Windows 10 IoT - 1】Window 10系统安装(树莓派 Pi2)
  6. java泛型中的对象
  7. VisualSVN Server搭建VDFS分布式仓研究(未成功)
  8. log4j的一些问题
  9. Searching External Data in SharePoint 2010 Using Business Connectivity Services
  10. php两种导出excel的方法
  11. 【优先队列-求第Ki大的数】Black Box
  12. js控制href内容的连接内容的变化
  13. python 标准库 -- logging
  14. django集成ansibe实现自动化
  15. odoo开发笔记--form视图自定义
  16. 块级格式化上下文( Block formatting contexts)
  17. HBase学习之路 (十)HBase表的设计原则
  18. show engine innodb status 详细介绍
  19. 现象级AR营销助力“口碑双十二”,蚂蚁特工在全国数万商户掀起“AR捉四宝”
  20. c++面试题中经常被面试官面试的小问题总结(二)(本篇偏向指针知识)

热门文章

  1. Java培训机构如何选择才能避免被骗?
  2. ISIJ2021 游记
  3. Environment Modules 简明教程
  4. Python爬虫3大解析库使用导航
  5. requests+bs4爬取豌豆荚排行榜及下载排行榜app
  6. 码上来战!探索“智”感生活,HMS Core线上Codelabs挑战赛第4期开始!
  7. C++中的字符串输入getline
  8. 疯了吧!这帮人居然用 Go 写“前端”?(一)
  9. 谈谈你对volatile的理解
  10. 【leetcode】1217. Minimum Cost to Move Chips to The Same Position