• python中的继承


    要理解继承首先要有父类子类的概念,可以理解成子类从父类中继承父类的属性和方法

    创建父类

    class Pet:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def jump(self):
            print(self.name+"在跳")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    创建子类

    class Cat(Pet):
        pass
    mycat=Cat("白白",2)
    print(mycat.jump())
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    如果您不想向该类添加任何其他属性或方法,就使用 pass 关键字

    现在,Cat 类拥有与 Pet 类相同的属性和方法。

    为子类添加新的属性或方法

    class Pet:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def jump(self):
            return(self.name+"在跳")
    class Cat(Pet):
        def miao(self):
            return(self.name+"在叫")
        def jump(self):
            return(self.name+"在跳个不停")
    mycat=Cat("白白",2)
    print(mycat.jump())
    print(mycat.miao())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    当子类调用函数时,会先在自身寻找,如果没有就去父类寻找,所以当我们有定义了一遍jump后不会再调用父类里的jump,同时我们也可以定义自己专属的函数,

    此时有个问题,如果我要在__init__里新增属性怎么办呢,比如猫我想让他有花纹,而狗我不想让他有花纹,self.pattern=Trueself.pattern=False该怎么办

    如果我们像刚刚一样,去新写一个__init__,就只能把原来的name和age再写一遍,因为调用子类的__init__后父类的是不会调用的
    此时就引出了super 方法

    super方法

    super会返回当前类的父类

    class Pet:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def jump(self):
            return(self.name+"在跳")
    class Cat(Pet):
        def __init__(self,name,age):
            super().__init__(name,age)
            self.pattern=True
    class Dog(Pet):
        def __init__(self,name,age):
            super().__init__(name,age)
            self.pattern=False
    mycat=Cat("miao",2)
    mydog=Dog("woof",3)
    print(mycat.pattern)
    print(mydog.pattern)
    print(mycat.age)
    print(mydog.age)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述
    这里有两点要注意

    1. 子类里的__init__里的参数要包含父类的参数,这样子后面才能super().__init__(name,age),否则会报错
    2. 这样子把要新添的参数放入函数的形参里也是没有问题的,还可以设定初始值
    class Cat(Pet):
        def __init__(self, name, age, pattern=True):
            super().__init__(name, age)
            self.pattern = pattern
    
    • 1
    • 2
    • 3
    • 4

    在进行神经网络学习时学习到的关于super的补充知识

    pytorch神经网络这篇文章里,我在建立神经网络时发现了这个用法
    在这里插入图片描述
    于是经过学习,现在就来补充一下关于super更多的细节

    尽管我们更常用的模式是super括号里什么都没有,但是其实super的完整版,它里面应该是有2个参数的,第一个参数是一个type也就是一个class,而第二个参数是一个type或者是一个object,其中第二个参数决定了这个函数bind到哪一个object或者class上,同时第二个参数决定了使用哪个mro,而第一个参数决定了在mro链上从哪个class开始往后找

  • 相关阅读:
    服务器能分成的四种类型有哪些?
    API设计中性能提升的10个建议
    jenkins介绍
    数据优化 | CnOpenData中国工业企业专利及引用被引用数据
    @MapperScan的作用
    4721. 排队
    甘特图的这些新玩法,你都知道吗?
    将json数据导入到ES集群——解决方案对比&填坑日记
    OpenAI Java SDK——chatgpt-java-v1.0.4更新支持GPT-3.5-Turbo,支持语音转文字,语音翻译。
    计算机毕业设计选题推荐-家庭理财微信小程序/安卓APP-项目实战
  • 原文地址:https://blog.csdn.net/qq_44154915/article/details/132790931