博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3 day6面向对象
阅读量:7074 次
发布时间:2019-06-28

本文共 4223 字,大约阅读时间需要 14 分钟。

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):        passclass 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)
View Code

 

李亮 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)
View Code
李亮 talking: 汪汪汪.....赵新新 talking: 喵喵喵.....

  

转载于:https://www.cnblogs.com/zhangmingda/p/9145063.html

你可能感兴趣的文章
html5+canvs实现flash效果。
查看>>
form-data、x-www-form-urlencoded、raw、binary的区别
查看>>
第1周---python网络爬虫规则
查看>>
Shell中cut用法
查看>>
Python 文件操作
查看>>
AC620教程 第十五节 8位7段数码管驱动设计与验证
查看>>
第十章 Libgdx音频之概述
查看>>
【CSS】使用CSS控制文字过多自动省略号
查看>>
【maven】maven创建web项目-pom文件提示web.xml is missing and <failOnMissingWebXml> is set to true...
查看>>
2016数据库考试题
查看>>
使用Zipalign工具优化Android APK应用记录
查看>>
LinearLayout属性baselineAligned的作用及baseline
查看>>
事件怎么看?
查看>>
css页面字体替换源代码和页面显示不一样问题解决
查看>>
读书笔记--精通CSS高级Web标准解决方案(五)---链接样式
查看>>
网络服务
查看>>
LaTeX新人教程,30分钟从完全陌生到基本入门
查看>>
nginx关闭日志
查看>>
我的自白,白衣轩重开
查看>>
angularjs-select2的使用
查看>>