• 重用父类功能的两种方式


    # 在子类派生的新方法中如何重用父类的功能
    # 方式一:指名道姓调用某一个类下的函数=》不依赖于继承关系
    # 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继续往后查找
  • 相关阅读:
    redis要注意的一些知识
    redis数据类型及常用命令使用
    基于zookeeper的分布式锁
    基于redis的分布式锁
    基于数据库的分布式锁
    数据库的4中隔离级别
    远程调用历史及代码编写demo
    数据库的ACID跟事务隔离级别
    JAVA8 十大新特性详解
    java8 :: 用法 (JDK8 双冒号用法)
  • 原文地址:https://www.cnblogs.com/h1227/p/12676056.html
Copyright © 2020-2023  润新知