1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
      <output id="hzk7v"></output>
    2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
    3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

      Python类的继承多态及获取对象信息操作详解

       更新时间2019年02月28日 11:40:31   作者-牧野-   我要评论

      这篇文章主要介绍了Python类的继承多态及获取对象信息操作,结合实例形式较为详细的分析了Python面向对象程序设计中类继承多态等相关操作技巧与注意事项,需要的朋友可以参考下

      本文实例讲述了Python类的继承多态及获取对象信息操作分享给大家供大家参考具体如下

      继承

      类的继承机制使得子类可以继承父类中定义的方法拥有父类的财产比如有一个Animal的类作为父类它有一个eat方法

      class Animal(object):
        def __init__(self):
          print("Animal 构造函数调用")
        def eat(self):
          print("Animal is eatting!")
      
      

      写两个子类Cat和Dog类继承自Animal类声明方法是在定义子类的时候在子类的括号内写?#32454;?#31867;Animal

      class Animal(object):
        def __init__(self):
          print("Animal 构造函数调用")
        def eat(self):
          print("Animal is eatting!")
      class Cat(Animal):
        def __init__(self):
          print("Cat 构造函数调用")
      class Dog(Animal):
        def __init__(self,age):
          self.age=age
          print("Dog 构造函数调用")
      
      

      两个子类中并没有声明任何方法但是会自动继承父类中的eat方法

      cat=Cat()
      dog=Dog(3)
      cat.eat()
      dog.eat()
      
      

      声明两个对象调用eat方法运行输出

      Cat 构造函数调用
      Dog 构造函数调用
      Animal is eatting!
      Animal is eatting!

      一般把一些共有的方法定义在基类中其他继承自该基类的子类就可以自动拥有这个方法

      多态

      在继承的基础上就引入了类的另外一个重要的特性多态

      考虑一个问题子类可以继承父类的方法那子类是否可以实现自己的这个方法呢答案是可以的

      class Animal(object):
        def __init__(self):
          print("Animal 构造函数调用")
        def eat(self):
          print("Animal is eatting!")
      class Cat(Animal):
        def __init__(self):
          print("Cat 构造函数调用")
        def eat(self):
          print("Cat is eatting!")
      class Dog(Animal):
        def __init__(self,age):
          self.age=age
          print("Dog 构造函数调用")
        def eat(self):
          print("年龄是"+str(self.age)+"岁的Dog is eatting!")
      cat =Cat()
      cat.eat()
      dog=Dog(3)
      dog.eat()
      
      

      子类如果也定义了自己的实现就会优先调用自己的实现上边cat和dog调用eat方法就分别是自己的实现运行输出

      Cat 构造函数调用
      Cat is eatting!
      Dog 构造函数调用
      年龄是3岁的Dog is eatting!

      多态意味着一个接口多种实现另一个可以体现类的多态这种特性的例子

      def eat(animal):
        if hasattr(animal,'eat'):
          animal.eat()
        if hasattr(animal,'age'):
          a=getattr(animal,'age')
          print('animal的年龄是'+str(a)+'岁')
      eat(dog)
      
      

      这里定义了一个普通函数eat函数的入参是类的对象具体实现是调用传入的对象的eat方法传入不同的对象就有不同的输出调用的时候只要调用这个接口就可以了而不用管具体的细节

      运行输出

      年龄是3岁的Dog is eatting!
      animal的年龄是3岁

      获取对象信息

      hasattr(object , 'name')
      
      

      ?#24471;号?#26029;对象object是否包含名为name的属性或方法如果有则返回True没有则返回False

      getattr( object, 'name')
      
      

      ?#24471;?#33719;取对象object中名称为name的属性返回name的值

      对类中方法的调用可以先用hasattr判断是否存在该方法然后再调用这个方法避免异常

      class Animal(object):
        def __init__(self):
          print("Animal 构造函数调用")
        def eat(self):
          print("Animal is eatting!")
      def eat(animal):
        if hasattr(animal,'eat'):
          animal.eat()
        if hasattr(animal,'age'):
          a=getattr(animal,'age')
          print('animal的年龄是'+str(a)+'岁')
        if hasattr(animal, 'sleep'):
          animal.sleep()
        else:
          print('animal类中不含有sleep方法')
      animal=Animal()
      eat(animal)
      
      

      运行输出

      Animal 构造函数调用
      Animal is eatting!
      animal类中不含有sleep方法

      更多关于Python相关内容?#34892;?#36259;的读者可查看本站专题Python面向对象程序设计入门与进阶教程Python数据结构与算法教程Python函数使用技巧总结Python字符串操作技巧汇总Python编码操作技巧总结Python入门与进阶经典教程

      希望本文所述对大家Python程序设计有所帮助

      相关文章

      最新评论

      3dԻв

        1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
          <output id="hzk7v"></output>
        2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
        3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

            1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
              <output id="hzk7v"></output>
            2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
            3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>