zoukankan      html  css  js  c++  java
  • Python 继承

    继承

    什么是继承

    继承讲的通俗一些就是一个类,衍生出了一个类。通常叫做父类与子类python中一个子类可以继承多个父类,说白了就是可以找多个干爹罩着自己

    类的继承

    ####类的继承
    class A:
        def a1(self):
            print('aaa。。。。。')
    class B(A):
        pass
        # def a1(self):
        #     # print('bbbbb......')
        #     pass
    b1 = B
    b1.a1(b1)
    

    多类继承

    ![无标题](F:无标题.png)class A:
        def a1(self):
            print('aaa。。。。。')
    class B:
        pass
        # def a1(self):
        #     print('bbbbb......')
        #     pass
    class C(A,B):
        def a1(self):
            print('ccccc......')
    c1 = C
    c1.a1(c1)
    

    无标题

    子类重构父类方法

    子类可以将父类已经有的方法重新写入

    ####通过
    class Student(Person):
        school = 'yyyy'
        def __init__(self,name,age,course):
            #如何重用父类的__init__方法
            Person.__init__(self,name,age)
            self.course=course
        def study(self):
            Person.study(self)
            print("%s学生在学习"%self.name)
    
    
    stu1=Student('wed',19,"Python")
    # stu1.school='xxx'
    print(stu1.school)
    stu1.study()
    
    #######第二版
    class A:
        def a1(self):
            print('aaa。。。。。')
        def __init__(self,name='xigua'):
            self.name = name
            print(name)
    class C(A):
        # def a1(self):
        #     print('ccccc......')
        def __init__(self,name):
            A.__init__(self,name)
            self.name = name
    c1 = C
    c1.__init__(c1,'nihao')
    

    通过super方法修改

    class Person(object):
        def __init__(self,name,age):
            self.name=name
            self.age=age
    
    class Student(Person):
        school = 'yyyy'
        def __init__(self,name,age,course):
            #super()相当于得到了一个特殊对象,第一个参数不需要传,调用绑定方法,会把自己传过去
            ##########    self不需要传,不需要传
            # super().__init__(name,age)
            #看到别人这么写:super(类名,对象)  在py3中为了兼容py2
            #在py3中这么写和省略写法完全一样
            #在py2中必须super(Student,self)写
            super(Student,self).__init__(name,age)
            self.course=course
    
    stu=Student('nick',19,'python')
    print(stu.name)
    print(stu.age)
    print(stu.course)
    
    总结,有继承关系的时候,通常用super,
    指名道姓的方式在什么情况下用?
    1 没有继承关系
    2 如果继承了多个父类,super是按照mro列表找,现在想指名道姓的用某个父类的某个方法,就需要指名道姓的使用
    
    
    
    
  • 相关阅读:
    解决:Could not resolve archetype org.apache.maven.archetypes
    Spring MVC配置MyBatis输出SQL
    Spring集成MyBatis 通用Mapper以及 pagehelper分页插件
    关于SpringMVC或Struts2接受参数接收不到的原因
    配置quartz启动时就执行一次
    ajaxFileUpload进行文件上传时,总是进入error
    spring mvc注入配置文件里的属性
    java中将一个文件夹下所有的文件压缩成一个文件
    flume failed to start agent because dependencies were not found in classpath
    ubuntu不能安装pip unable to install pip in unbuntu
  • 原文地址:https://www.cnblogs.com/ledgua/p/11420463.html
Copyright © 2011-2022 走看看