首页 > 技术文章 > 继承(初识继承,继承的进阶)

ljc-0923 2018-07-27 17:19 原文

1,面向对象的三大特性:继承,多太,封装

  • 1.1>继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个个父类,父类又可成为基类或超类,新建的类称为子类或派生类.
class Animal:
    breath = "呼吸"

    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age


class Cat(Animal):  # 括号里边的叫父类,基类,超类,括号外面的是子类和派生类
    def __init__(self):
        pass

    def jiao(self):
        print("喵喵叫")

2,初识继承:

  2.1>子类以及子类实例化对象也可以访问父类的恩和方法或变量.

    2.1.1子类实例化访问父类的方法:

结果如下:

  • 访问父类中的变量   print(d.breath).............................................此时打印的结果是:呼吸
    • 2.1.2>子类可以访问父类的所有内容
      • print(Dog.breath).....................................此时打印的结果是:呼吸
      • print(Dog.pao())........................................此时打印的结果是:都可以奔跑

3,查询顺序:

4,通过子类对象去只执行父类的方法:子类中不要定义与父类同名的方法

  • 通过子类对象去只执行子类的方法:只需要在子类建立这个方法
  • 既要执行子类的方法,又要执行父类的方法有以下2中方法:
class Animal:
    breath = "呼吸"

    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age


class Cat(Animal):  # 括号里边的叫父类,基类,超类,括号外面的是子类和派生类
    def __init__(self, name, sex, age, paws):  # 第一种方法引用父类类名去执行父类中的构方法
        super().__init__(name, sex, age, )  # 第二种用super.()内置函数去执行父类中方法
        self.paws = paws

    def jiao(self):
        print("喵喵叫")
c = Cat("加菲猫","",2,"梅花爪")
print(c.__dict__)  # 此时打印的结果是{"name":"加菲猫","sex":"公","age":2,"paws":"梅花爪"} 

5,继承的进阶

  • 5.1>继承的分类:单继承,多继承
    • 单继承:一个父类对应一个子类
    • 多继承:一个子类与多个父类想对应
  • 5.2>类的分类:经典类,新式类
    • 新式类:凡是继承object类都是新式类,在python3x中所有的类都是新式类,因为python3x中的类都默认继承object
    • 经典类:不继承object类都是经典类,在python2x中(既有新式类,又有经典类)所有类默认都不继承object类,所有的类都是经典类,你可以让其继承object类,在类名后加一个(object)即可
  • 新式类,经典类查询顺序一样
  • 5.3>多继承:
    • 新式类:遵循广度优先
    • 经典类:遵循深度优先
  • 多继承的新式类:广度优先,一条道走到倒数第二级,判断,如果其他路能走到终点,则返回走另一条路,如果不能,则走到终点.广度优先可以用类名.mro()去查询广度优先的路径print(F.mro())

  多继承经典类 深度优先:一条路走到底

 

  • 5.4>继承到的好处:
    • 1>提高了代码的服用率
    • 2>提高了代码的维护性
    • 3>让类与类之间产生了关系,是多的态前提     

推荐阅读