zoukankan      html  css  js  c++  java
  • Python中super()的用法

       参考:https://blog.csdn.net/a__int__/article/details/104600972

      Python里的super().__init__()有什么作用。

      直白的说super().__init__(),就是继承父类的init方法,同样可以使用super()+. 其他方法名,去继承其他方法

      示例对比

      先写一个父类,父类定义了一个__init__方法

    class Person(object):
        def __init__(self, name='Person'):
            self.name = name
    

      在写三个继承自该父类的子类

    # 直接继承
    class Puple(Person):
        pass
    
    # 重写init方法
    class Puple_Init(Person):
        def __init__(self, age):
            self.age = age
    
    # 重写init方法但是继承了父类的init方法
    class Puple_Super(Person):
        def __init__(self, name, age):
            
            # self.name = name
            self.age = age
            super().__init__(name)
    

      第一个子类Puple直接继承
      第二个子类Puple_Init继承并写了init方法
      第三个子类Puple_Super继承并写了init方法,还添加了super().__init__()

      分别创建三个类的对象

    pp = Puple()
    pp_i = Puple_Init(10)
    pp_s = Puple_Super('Puple_Super',12)
    

      运行结果对比

      第一个对象可以接调用父类的name属性

    print(pp.name)
    # Person
    

      第二个对象pp_i继承自父类,覆盖初始化def init增加属性age,不能调用name属性

    # print(pp_i.name)
    # AttributeError: 'Puple_Init' object has no attribute 'name'
    

      第三个对象pp_s继承自父类,覆盖初始化init,增加了定义属性age,同时继承了父类的init,即相当于在init方法里也包含self.name = name 所以可以调用name属性

    print(pp_s.name)
    # Puple_Super
    

      

  • 相关阅读:
    泛式之争
    测试的本质
    动态语言与静态语言
    对象之间的关系
    关于“重复”的一段交流
    装饰器与子类化
    类的设计质量
    抽象跟难
    Unity经典游戏编程之:球球大作战
    关于Unity 中对UGUI制作任务系统的编程
  • 原文地址:https://www.cnblogs.com/minseo/p/15005363.html
Copyright © 2011-2022 走看看