zoukankan      html  css  js  c++  java
  • 重用父类功能的两种方式

    # 在子类派生的新方法中如何重用父类的功能
    # 方式一:指名道姓调用某一个类下的函数=》不依赖于继承关系
    # class OldboyPeople:
    # def __init__(self,name,age,sex):
    # self.name=name
    # self.age=age
    # self.sex=sex
    #
    # def f1(self):
    # print('%s say hello' %self.name)
    #
    #
    # class Teacher(OldboyPeople):
    # def __init__(self,name,age,sex,level,salary):
    # OldboyPeople.__init__(self,name,age,sex)
    #
    # self.level = level
    # self.salary=salary
    #
    # tea_obj=Teacher('egon',18,'male',10,3000)
    # print(tea_obj.__dict__)

    # 方式二:super()调用父类提供给自己的方法=》严格依赖继承关系
    # 调用super()会得到一个特殊的对象,该对象会参照发起属性查找的那个类的mro,去当前类的父类中找属性
    提示:在Python2中super的使用需要完整地写成super(自己的类名,self) ,而在python3中可以简写为super()。

    # class OldboyPeople:
    # def __init__(self,name,age,sex):
    # self.name=name
    # self.age=age
    # self.sex=sex
    #
    # def f1(self):
    # print('%s say hello' %self.name)
    #
    #
    # class Teacher(OldboyPeople):
    # def __init__(self,name,age,sex,level,salary):
    # # super(Teacher,self).__init__(name,age,sex)
    # super().__init__(name,age,sex) # 调用的是方法,自动传入对象
    #
    # self.level = level
    # self.salary=salary
    #
    # # print(Teacher.mro())
    # tea_obj=Teacher('egon',18,'male',10,3000)
    # print(tea_obj.__dict__)


    # super()案例

    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()
    obj.test()

    print(C.mro())
    这两种方式的区别是:方式一是跟继承没有关系的,而方式二的super()是依赖于继承的,并且即使没有直接继承关系,super()仍然会按照MRO继续往后查找
  • 相关阅读:
    JS Ajax跨域访问
    CentOS 6.8 Java 环境搭建
    vue+vant ui+高德地图的选址组件
    vue和element全局loading
    axios简单的二次封装
    vuex的简单教程
    vue 使用 element ui动态添加表单
    Promise对象和async函数
    css不定高图文垂直居中的三种方法
    js点击复制文本
  • 原文地址:https://www.cnblogs.com/h1227/p/12676056.html
Copyright © 2011-2022 走看看