zoukankan      html  css  js  c++  java
  • 第二十天

    今日内容

    一、继承应用

    1.1在子类派生的新方法中重用父类的功能

      方式一:与继承无关,直接调用另一个类的功能
              class Summary():
                 school = "上海校区"
                 def __init__(self,name,age,gender):
                     self.name = name
                     self.age = age
                     self.male = gender
            
             class Student(Summary):
                 def choose(self):
                     print("%s 选课成功" % (self.name))
    
             stu1 = Student("aaa",18,"male")
             stu2 = Student("bbb",19,"male")
             stu3 = Student("ccc",20,"male")
    
             class Teacher():
                 school = "上海校区"
                 def __init__(self,name,age,gender,level):
                     Summary.__init__(self,name,age,gender)   #直接调用Summary功能
                     self.level = level
                 def score(self):
                     print("%s 正在打分" % (self.name))
    
             ter1 = Teacher("xxx",38,"male",10)
             ter2 = Teacher("yyy",28,"male",1)
             print(ter1.__dict__)
    
      方式二:supwe的运用,严格按照继承顺序来查找属性
            class Summary():
                school = "上海校区"
    
                def __init__(self,name,age,gender):
                    self.name = name
                    self.age = age
                    self.male = gender
    
            class Teacher(Summary):
                def __init__(self,name,age,gender,level):
                    super(Teacher, self).__init__(name,age,gender)
                    self.level = level
    
                def score(self):
                    print("%s 正在打分" % (self.name))
    
            tea1 = Teacher("XXX",18,"meal",10)
            print(tea1.__dict__)
    
      案例一:super是按照发起者的mro列表依次往后查找
            class A():
                def test(self):
                    print("from A")
                    super().test()
    
            class B():
                def test(self):
                    print("from B")
    
            class C(A,B):
                pass
            obj = C()     #当前发起者为C类,C的mro列表为[C,A,B,object],当test先找到A内,
            obj.test()    #然后A内的super().test()再沿着A继续往下找就找到了B
    
            obj1 = A()
            obj1.test()  #会报错,因为A内的super().test()会找到object内,而object内没有test
    

    1.2mixins机制

      继承表达的是一个is a 的关系,在使用多继承时主要继承的父类放在继承括号的右边,
      只需要使用其功能的父类放在左边并取名为Mixins结尾
      例:
       class Vehicle():
           def vehicle(self):
               print("交通工具的功能")
    
       class FlyMixins():
           def flying(self):
               print("飞行的功能")
    
       class CivlAircraft(FlyMixins,Vehicle):
           print("明航飞机")
    
       class Helicopter(FlyMixins,Vehicle):
           print("直升飞机")
      
       class Car(Vehicle):
           print("汽车")
    
       obj2 = CivlAircraft()
       obj2.flying()
    

    1.3组合运用

      原来继承用的是 is a (某种东西是某一类)的概念,组合是某种东西有某一功能的概念
      当你使用的功能不是is a 的概念就用组合
      例:
            class Summary():
                school = "上海校区"
    
                def __init__(self,name,age,gender):
                    self.name = name
                    self.age = age
                    self.male = gender
    
            class Student(Summary):
                school = "上海校区"
    
                def choose(self):
                    print("%s 选课成功" % (self.name))
    
            class Teacher():
                school = "上海校区"
    
                def __init__(self,name,age,gender,level):
                    Summary.__init__(self,name,age,gender)
                    self.level = level
    
                def score(self):
                    print("%s 正在打分" % (self.name))
    
            class Course():
                def __init__(self,name,price,period):
                    self.name = name
                    self.price = price
                    self.period = period
    
                def tell(self):
                    print("课程信息<%s:%s:%s>" % (self.name,self.price,self.period))
    
            python = Course("python全栈开发",19800,"6mons")
            linux = Course("linux",19000,"5mons")
    
            stu1 = Student("XXX",18,"male")
            stu1.choose = python        #这时stu1不仅能调自己的信息还可以调用python对象的Course类功能
            stu1.choose.tell()
            print(stu1.name)
  • 相关阅读:
    【转】PCA for opencv
    【转】PCA算法学习_1(OpenCV中PCA实现人脸降维)
    从输入URL到页面渲染完成(转)
    前端面试笔记(整理)
    这样“断舍离”,你会活得更高级
    angular5.x全局loading解决方法
    angular路由守卫
    优化回流和重绘
    回流 (Reflow)和重绘 (Repaint)
    Javascript获取数组中最大和最小值
  • 原文地址:https://www.cnblogs.com/kk942260238/p/14267771.html
Copyright © 2011-2022 走看看