• W6_面向对象_封装_继承_多继承_多态


    W6_面向对象_封装_继承_多继承_多态

    80.81.82.83.第02章节-Python3.5-面向对象介绍

    class Role(object):
        n = 123        #类变量
        def __init__(self,name):  #构造函数
            self.name = name      #实例变量,作用域就是实例本身,又称为类的静态属性
        def got_shot(self):       #类的方法,又称为类的动态属性
            print(self.name,"get shot")
    
    r1 = Role("alex")   #实例化
    r1.got_shot()
    

    84.第05章节-Python3.5-实例变量与类变量

    若类变量与实例变量同名时,优找实例中的变量

    class Role(object):
        n = 123        #类变量
        def __init__(self,name,weapon,life_value=100):  #构造函数
            self.name = name     #实例变量,作用域就是实例本身,又称为类的静态属性
            self.weapon = weapon
            self.__life_value = life_value      
        def got_shot(self):       #类的方法,又称为类的动态属性
            print(self.name,"get shot")
    
        def __del__(self):   #析构函数
            print("%s 彻底死了" % self.name)
    
    r1 = Role("alex","ak47")   #实例化
    r2 = Role("jack","knife")   #实例化
    r1.got_shot()
    del r2  #销毁实例,其本质是删除变量 ,并非清空内存地址的内容
    
    

    类变量与实例变形:
    print(r1.n,r2.n,Role.n,100)
    r1.n = "abc" #这样赋值相当于在r1 内存地址中增加了一个变量名为n,并赋值为abc
    当r1去找n时,就优先找到自己存内存区域中的n
    print(r1.n,r2.n,Role.n,100)

    85.第06章节-Python3.5-类变量的作用及析构函数

    类变量

    类变量的作用:实例共用的属性,节省开销

    析构函数:

    在实例释放或销毁时执行的,通常用于做一些收尾工作,比如关闭一些数据库连接,打开的临时文件等

    变量名在,则内存地址不被回收,如果变量名被删除,则内存地址到期被回收
    del r1 销毁r1实例,即删除变量名

    私有属性

    私有属性,不希望其它实例访问
    格式:方法或属性前加双下划线即可

    
    class Role(object):
    
        def __init__(self,name,life_value=100):
            self.name = name
            self.__life_value = life_value  #加双下划线,表示私有方法,外部不可访问
        def got_shot(self):
            print(self.name,"get shot")
        def show_life_value(self):
            print(self.__life_value)
    
    r1 = Role("alex")
    r1.got_shot()
    r1.show_life_value()
    

    86.第07章节-Python3.5-类的继承

    方法垂柳:

    class People(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def eating(self):
            print("%s is eating" % self.name)
    
        def sleep(self):
            print("%s is sleeping"%self.name)
    
    class Man(People):
        def sleep(self):      #方法重构,不但实际了父类的方法,还增加了新的功能
            People.sleep(self)
            print("Man is sleep")
    
    m1 = Man("xiaoming",22)
    m1.sleep()
    

    87.第08章节-Python3.5-类的继承2

    重构构造函数

    class Man(People):
        def __init__(self,name,age,money):  构造函数重构
            People.__init__(self,name,age)
            super(Man,self).__init__(name,age)   #新式类写法,与上一句功能相同
            self.money = money
            print("%s 一出生就有%s money"%(self.name,self.money))
    
        def sleep(self):     
            People.sleep(self)
            print("Man is sleep")
    
    m1 = Man("xiaoming",22,100)
    m1.sleep()
    

    多继承

    class People(object):
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def eating(self):
            print("%s is eating" % self.name)
    
        def sleep(self):
            print("%s is sleeping" % self.name)
    
    
    class Relation(object):
        def make_friends(self, obj):
            print("%s make friends with %s" % (self.name, obj.name))
    
    
    class Man(People, Relation):  # 多继承
        pass
    
    
    m1 = Man("m1", 22)
    m2 = Man("m2", 23)
    m1.make_friends(m2)
    
    

    88.第09章节-Python3.5-经典类与新式类的继承顺序

    #class A:              #经典类的写法
    class A(object):       #新式类的写法
        def __init__(self):
            print("A")
    
    class B(A):
        pass
        # def __init__(self):
        #     print("B")
    
    
    class C(A):
        def __init__(self):
            print("C")
    
    
    class D(B,C):
        pass
        # def __init__(self):
        #     print("D")
    
    d = D()
    

    深度优先

    python2中,经典类的继承顺序为深度优先,新式类的继承顺序为广度优先

    广度优先

    python3中,经典类和新式类的继承顺序统一为广度优先

    89.第10章节-Python3.5-继承实例讲解

    class School(object):
        def __init__(self,name,addr):
            self.name = name
            self.addr = addr
            self.students = []
            self.staffs = []
        def enroll(self):
            pass
        def hire(self):
            pass
    
    class SchoolMember(object):
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
        def tell(self):
            pass
    
    class Teacher(SchoolMember):
        def __init__(self,name,age,sex,salary,course):
            super(Teacher,self).__init__(name,age,sex)
            self.salary = salary
            self.course = course
    
        def teach(self,stu_object):
            pass
        def tell(self):
            pass
    
    class Student(SchoolMember):
        def __init__(self,name,age,sex,id,grade):
            super(Student,self).__init__(name,age,sex)
            self.id = id
            self.grade = grade
    
        def tell(self,name,age,sex,id,grade):
            print(```
            -----student info----
    
    
              ```)
    
        def pay_tuition(self,amount):
            pass
    
    school = School("School_NO1","School_NO2")
    # t1
    # t2
    # s1
    # s2
    # school.hire(t1)
    # school.hire(t2)
    # school.enroll(s1)
    # school.enroll(s2)
    # print(school.students)
    # print(school.staffs)
    # school.staffs[0].teach()
    
    

    90.第11章节-Python3.5-多态实例讲解

    91.practice-选课系统

    角色:学校、学员、课程、讲师
    要求:

    1. 创建北京、上海 2 所学校

    2. 创建linux , python , go 3个课程 , linuxpy 在北京开, go 在上海开

    3. 课程包含,周期,价格,通过学校创建课程

    4. 通过学校创建班级, 班级关联课程、讲师

    5. 创建学员时,选择学校,关联班级

    6. 创建讲师角色时要关联学校,

    7. 提供两个角色接口
      6.1 学员视图, 可以注册, 交学费, 选择班级,
      6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
      6.3 管理视图,创建讲师, 创建班级,创建课程

    8. 上面的操作产生的数据都通过pickle序列化保存到文件里

  • 相关阅读:
    LFYZ-OJ ID: 1008 求A/B高精度值
    高精度运算
    【2018国庆雅礼集训】部分题解
    【模板】倍增求LCA
    Luogu1516 青蛙的约会
    loj #10043. 「一本通 2.2 例 1」剪花布条
    我太菜了
    Luogu1280 尼克的任务
    Luogu1091 合唱队形
    Luogu1006 传纸条
  • 原文地址:https://www.cnblogs.com/rootid/p/9471768.html
Copyright © 2020-2023  润新知