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: 喵喵喵.....

  

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. 日志审计功能-appent多个日志

    public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1"); jedis.setnx ...

  2. ASP .Net Core 在 CentOS8 ARM 下连接 SQL Server 2008 R2(Hypervisor)

    本文主要记录在 ARM 系统下无法连接SQL Server 2008 R2 的解决过程. 解决方案是使用 ODBC 的方式连接数据库,进行操作. 手上有公司的华为鲲鹏云计算 ARM 架构的 CentO ...

  3. CF1554E You

    考虑到删点操作的实质是指认边的方向. 由于这是一棵树,所以有很好的性质. 我们完全可以以此从树叶开始,往上拓扑进行,按照对某个数的取膜的大小来进行操作. 由此可知,除了 \(1\) 以外,任意 \(2 ...

  4. 洛谷 P3267 - [JLOI2016/SHOI2016]侦察守卫(树形 dp)

    洛谷题面传送门 经典题一道,下次就称这种"覆盖距离不超过 xxx 的树形 dp"为<侦察守卫模型> 我们考虑树形 \(dp\),设 \(f_{x,j}\) 表示钦定了 ...

  5. Codeforces 961F - k-substrings(二分+哈希)

    Codeforces 题面传送门 & 洛谷题面传送门 介绍一种奇怪的 \(\Theta(n\log n)\) 的奇怪做法. 注意到这个"border 的长度必须是奇数"的条 ...

  6. Matlab 调用 Python 脚本

    Matlab 调用 Python 脚本 最近尝试在 Matlab 环境中调用 Python 脚本,这里总结下碰到的几个问题. 1. Python 模块加载 在 Matlab 函数中,想要将 Pytho ...

  7. 【机器学习与R语言】10- 关联规则

    目录 1.理解关联规则 1)基本认识 2)Apriori算法 2.关联规则应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解关联规则 1)基本认识 购物 ...

  8. 虚拟节点轻松应对 LOL S11 百万并发流量——腾竞体育的弹性容器实践

    作者 刘如梦,腾竞体育研发工程师,擅长高并发.微服务治理.DevOps,主要负责电竞服务平台架构设计和基础设施建设. 詹雪娇,腾讯云弹性容器服务EKS产品经理,主要负责 EKS 虚拟节点.容器实例相关 ...

  9. binlog真的是银弹吗?有些时候也让人头疼

    大家好,我是架构摆渡人.这是实践经验系列的第三篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友. binlog 用于记录用户对数据库操作的SQL语句信息,同时主 ...

  10. A Child's History of England.52

    'Arthur,' said the King, with his wicked eyes more on the stone floor than on his nephew, 'will you ...