zoukankan      html  css  js  c++  java
  • 面向对象

    面向对象 - 继承性

    # cheer_xiong
    # (`・ω・´) python
    
    # IDE:就是用啥软件开发
    
    
    # 继承
    """
    就是新建类的一种方式,继承了一个类,类中的属性和方法就在子类中
    父类/基类
    子类/派生类
    新式类 : 只要继承了object类,就是新式类,在py3中,默认都继承object类
            在py2中,需要显示指定继承object
    经典类 : 没有继承object类,就是经典类
                py3中没有经典类
                py2中才有
    继承介绍:
        如何使用继承
            class 类名(父类)
                pass
            新式类和经典类
    
        利用继承减少代码冗余
            # 相同属性可以定义一个父类用来给其他子类调用,减少代码行数
            # 并且调用还是和之前一样
        重用父类查找方式一:
            涉及到属性查找顺序 先找对象,对象没有去类中,找不到去父类,找不到就报错
            但是涉及到多个父类继承,这个就引出以下
                |
        重用父类查找方式二:
            类实例化就会自动调用__init__,如果没有,就去父类中找
            多层继承:
                    class A:
                        a = 'aaa'
                    class B(A):
                        a = 'bbb'
                    class C(B):
                        a = 'ccc'
                    class D():
                        pass
                    # 往上一集查找
            多继承:
                    class A:
                        a = 'aaa'
                    class B:
                        a = 'bbb'
                    class C:
                        a = 'ccc'
                    class D(A,B,C):
                        pass
    
                    # A->B->C 根据从左到右找
    
            # 继承的菱形问题:
            新式类和经典类是不一样的
            *必须都继承一个类,并且不是object类,构成一个菱形*
            新式类:广度优先,最后一个先不找,去找其他的,最后找最后一个
            经典类:深度优先,一条道找到底
    
            # mro 列表,继承顺序查找列表(只在新式类中有)
            print(类名.mro())
            print(类名.__mro__)   # 相同
    
            重用父类方法的第一种方式:
                第一种方法和定义父类没有多大关系,因为定不定一都可以使用 指名道姓 的方式调用
                和继承没有关系
                class A:
                    def __init__(self, name, age):
                        self.name = name
                        self.age = age
    
                class B:
                    def __init__(self, name, age, price):
                        A.__init__(self, name, age)
                        self.price = price
    
                b = B('xc', 18, 100)
                print(b.name)
                print(b.age)
            重用父类方法的第二种方式:
                使用super(),需要继承父类才能调用父类的元素,
                还有一点就是super是严格按照 mro 来找元素了。
                class A:
                    def __init__(self, name, age):
                        self.name = name
                        self.age = age
    
                class B(A):
                    def __init__(self, name, age, price):
                        super().__init__(name, age)
                        self.price = price
    
                b = B('xc', 18, 100)
                print(b.name)
                print(b.age)
    
    
    
    
    
    """
    
    
    
    
  • 相关阅读:
    echarts数据包坐标拾取工具
    JS 多个条件判断
    js 实现各浏览器全屏
    前端统计使用插件
    JS 随机排序算法
    js中布尔值为false的六种情况
    Mosaic
    单点登录
    JavaScript数据结构和算法
    一个普通函数的冷僻属性(length、caller、arguments、name、[[Scopes]]和[[FunctionLocation]])
  • 原文地址:https://www.cnblogs.com/xiongchao0823/p/11418908.html
Copyright © 2011-2022 走看看