zoukankan      html  css  js  c++  java
  • Python3 day6面向对象

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

      

  • 相关阅读:
    Codeforces467C George and Job
    Codeforces205E Little Elephant and Furik and RubikLittle Elephant and Furik and Rubik
    Codeforce205C Little Elephant and Interval
    51nod1829 函数
    51nod1574 排列转换
    nowcoder35B 小AA的数列
    Codeforce893E Counting Arrays
    gym101612 Consonant Fencity
    CodeForces559C Gerald and Giant Chess
    CodeForces456D A Lot of Games
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/9145063.html
Copyright © 2011-2022 走看看