zoukankan      html  css  js  c++  java
  • 20180725 (面向对象的继承)

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

    一.初识继承       (子类以及子类实例化的对象,可以访问父类的任何方法和静态变量)

    1.最简单的继承例子

    例如:

      class Animal:

        breath = "会呼吸"

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

          self.age = age

          self.sex = sex

        def eat(self):

          print("可以吃")

      class Person(Animal):                       ======>(括号里面的是父类,基类或者超类)    括号外面的是子类,派生类

      p1 = Person("alex",29,"男")


    类名可以访问父类中的所有内容

    print(Person.breath)          ====>会呼吸

    Person.eat(111)       =====> 可以吃

    子类实例化的对象可以访问父类所有内容

    print(p1.breath)             =====>会呼吸

    p1.eat()                       ======>可以吃

    2.查询顺序

    类名.属性():先从本类空间找,如果找不到,就从父类找

    对象.属性():先从对象空间找,如果找不到,到类空间找,如果找不到,就到父类找

    3.只执行父类的方法:   子类中不要定义与父类同名的方法

    例如:

    class Animal:
    breath = "会呼吸"
    def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex
    def eat(self):
    print("可以吃")
    class Person(Animal):
    pass
    p1 = Person("alex",29,"男")
    p1.eat(1)

       只执行子类的方法:    在子类中创建这个方法

    例如:

    class Animal:
    breath = "会呼吸"
    def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex

    class Person(Animal):
    def eat(self):
    print("可以吃")
    p1 = Person("alex",29,"男")
    p1.eat()

       既要执行本类的方法,又要执行父类的方法

    方法一:

    class Animal:
    def __init__(self,name,sex,age):
    self.name = name
    self.sex = sex
    self.age = age
    class Bird(Animal):
    def __init__(self,name,sex,age,wing):
    Animal.__init__(self,name,sex,age) =====>调用父类,然后自动执行父类中的__init__ 然后封装下面三个属性
    self.wing = wing
    b1 = Bird("鹦鹉","公",2,"绿色")
    print(b1.__dict__)

    方法二:

    class Animal:
    def __init__(self,name,sex,age):
    self.name = name
    self.sex = sex
    self.age = age
    class Bird(Animal):
    def __init__(self,name,sex,age,wing):
    super().__init__(name,sex,age) == super(Bird,self).__init__(name,sex,age) super会自动执行父类中的__init__ 将b1的实例化对象传给self
    self.wing = wing
    b1 = Bird("鹦鹉","公",2,"绿色")
    print(b1.__dict__)

    二.继承的进阶

    1.类:经典类 和 新式类

    新式类:凡是继承object类都是新式类  (python3x 中所有的类都是新式类,因为python3x 中的类都默认继承object)

    经典类:不继承object类的都是经典类(python2x 中所有的类默认都不继承object类.所有的类默认都是经典类)

                class A(boject):     可以让其继承object

    2.继承:单继承:新式类,经典类查询顺序一样

               多继承:新式类:遵循广度优先

                          经典类:遵循深度优先

    多继承的新式类(广度优先):

    class A:
    def func(self):
    print("IN A")
    class B(A):
    def func(self):
    print("IN B")
    class C(A):
    def func(self):
    print("IN C")
    class D(B):
    def func(self):
    print("IN D")
    class E(C):
    def func(self):
    print("IN E")
    class F(D,E):
    def func(self):
    print("IN F")
    f1 = F()
    f1.func()

                                               

    多继承的经典类(深度优先):

                                           

     多继承原理C3算法

    例如:

    class H:
    def bar(self):
    print('F.bar')
    class G(H):
    def bar(self):
    print('F.bar')
    class F(H):
    def bar(self):
    print('F.bar')
    class E(G):
    def bar(self):
    print('E.bar')
    class D(F):
    def bar(self):
    print('D.bar')
    class C(E):
    def bar(self):
    print('C.bar')
    class B(D):
    def bar(self):
    print('B.bar')
    class A(B, C, D):
    def bar(self):
    print('A.bar')
    a = A()
    print(A.mro())

    
    
  • 相关阅读:
    在 jQuery Repeater 中为多个字段排序
    使用 AjaxManager 生成调用服务器端方法的 javascript 函数
    使用 JQueryElement ResponseProgress 显示页面执行进度
    (原创)反ARP攻击的绝招,让你在ARP的炮雨攻击下永不掉线
    (原创)最详细可靠的Cadence16.01破解crack和安装方法步骤
    (原创)PCI总线特性及信号说明
    (原创)Modelsim的“The system date appears to have been set back.Cannot continue”问题的解决办法
    爱你哦
    为ASP.NET封装的SQL数据库访问类
    JavaScript中的高级特性及特别对象、属性和方法
  • 原文地址:https://www.cnblogs.com/lhy979/p/9368537.html
Copyright © 2011-2022 走看看