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年04月12日 11:00:15   作者微信1257309054   我要评论

      这篇文章主要介绍了Python面向对象程序设计构造函数和析构函数用法,结合具体实例形式分析了Python面向对象程序设计中构造函数与析构函数的概念原理功能及相关使用技巧,需要的朋友可以参考下

      本文实例讲述了Python面向对象程序设计构造函数和析构函数用法分享给大家供大家参考具体如下

      构造函数和析构函数

      1构造方法的使用

      很多类都倾向于将对象创建为有初始化状态.因此类可以定义一个名为init()的特殊方法(构造方法)来实例化一个对象

      构造方法也叫做构造器,是指当实例化一个对象(创建一个对象)的时候,第一个被自动调用的方法

      演示1:构造方法被调用的契机

      class Person():
        #构造方法
        def __init__(self):
          print("构造函数被执行了")
        #创建对象的过程中构造函数被自动调用
      p1 = Person()
      
      

      输出

      构造函数被执行了

      结论:创建对象的过程中调用了构造函数

      当未手动添加构造函数时,系统会默认提供一个无参的构造函数

      演示2:构造函数和普通函数之间的区别

      说明:构造函数本质上还是一个函数,函数可以有参数,也可以无参,所以同样的道理,构造函数也是如此

      class Person():
        #一般情况下,构造方法的参数和成员变量有关,并?#20197;?#35774;置的过程中与成员变量同名
        def __init__(self, name, age, height, weight):
          #print(nname, age, height, weight)
          #因为构造方法是创建对象的过程中被调用的
          #所以构造方法的作用一般是用来定义成员变量并且给成员变量赋值
          #定义属性并给属性赋值
          #通过self来进行区分是成员变量还是形参
          self.name = name
          self.age = age
          self.height = height
          self.weight = weight
        def run(self):
          print("run")
        def eat(self, food):
          print("eat "+ food)
      '''
      构造函数: __init__() 在使用类创建对象的时候自动调用
      注意: 如果不显式的写出构造函数,默认会自动添加一个空的构造函数,函数体中什么都不实现
      '''
      per = Person("hanmeimei", 20, 170, 55)
      print(per.name, per.age)
      per.run()
      per2 = Person("lili", 21, 175, 70)
      print(per2.name, per2.age)
      
      

      输出

      hanmeimei 20
      run
      lilei 21

      2self的使用

      注意:self代表类的实例[对象],而非类本身

      类的方法与普通的函数只有一个特殊的区别>他们必须有一个额外的第一个参数名称,按照惯例它的名字是self

      self.__class__:返回的是当前类的类名

      class Test():
        def prt(self):
          print(self)
          print(self.__class__)
      t = Test()
      t.prt()
      
      

      输出

      <__main__.Test object at 0x0000017D47D81B00>
      <class '__main__.Test'>

      演示2:self不是python的关键字

      class Person():
        def run(self):
          print("run")
          print(self.__class__)
          p = self.__class__("tt", 30, 10, 30)
        def eat(self,food):
          print("eat" + food)
        def say(self):
          print("hello, my name is %s, I am %d year old" % (self.name, self.age))
        def play(a):
          print("play", a.name)
        def __init__(self, name, age, height, weight):
          self.name = name
          self.age = age
          self.height = height
          self.weight = weight
      # self代表此时正在创建对象,self.属?#21592;?#31034;当前对象的属性
      per1 = Person("tom", 20, 160, 80)
      per1.say()
      per2 = Person("henmeimei", 21, 160, 80)
      per2.say()
      per1.say()
      per1.run()
      
      

      输出

      hello, my name is tom, I am 20 year old
      hello, my name is henmeimei, I am 21 year old
      hello, my name is tom, I am 20 year old
      run
      <class '__main__.Person'>

      3析构函数的使用

      析构函数调用的契机对象被销毁的时候

      1程序执行结束会自动调用析构函数
      2使用del 删除对象的时候系统会自动调用析构函数

      注意如果没写析构函数当符合析构函数调用的契机时系统会自动调用父类的析构函数

      演示:

      class Person():
        def run(self):
          print("run")
        def eat(self, food):
          print("eat "+food)
        def __init__(self, name, age, height, weight):
          self.name = name
          self.age = age
          self.height = height
          self.weight = weight
         def __del__(self):
          print("析构函数被调用了")
      per = Person("hanmeimei", 20, 170, 55)
      #释放对象
      del per
      #注意:对象释放后就不能再进行访问了
      #在函数里定义的对象,会在函数结束时自动释放,这样可以用来减少内存空间的浪费
      #其实就是作用域的问题
      def func():
        per2 = Person("aa", 1, 1, 1)
      func()
      
      

      输出

      析构函数被调用了
      析构函数被调用了

      class Animal(object):
        def __del__(self):
          print('Animal父类的析构函数被调用了')
      class Cat(Animal):
        pass
      cat = Cat()
      
      

      输出

      Animal父类的析构函数被调用了

      class A():
        def __init__(self):
          print("父类A构造函数被调用了")
        def __del__(self):
          print("父类A析构函数被调用了")
      class B(A):
        def __init__(self):
          print("子类B构造函数被调用了")
          A.__init__(self)
        def __del__(self):
          print("子类B析构函数被调用了")
      class C(A):
        pass
      def main():
        b = B()
        del b
        print("*********************")
        c = C()
      if __name__ == '__main__':
        main()
      
      

      输出

      子类B构造函数被调用了
      父类A构造函数被调用了
      子类B析构函数被调用了
      *********************
      父类A构造函数被调用了
      父类A析构函数被调用了

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

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

      相关文章

      • python从子线程中获得返回值的方法

        python从子线程中获得返回值的方法

        今天小编就为大家分享一篇python从子线程中获得返回值的方法具有很好的参?#25216;?#20540;希望对大家有所帮助一起跟随小编过来看看吧
        2019-01-01
      • 一个基于flask的web应用诞生 用户注册功能开发5

        一个基于flask的web应用诞生 用户注册功能开发5

        一个基于flask的web应用诞生第五篇这篇文章主要介绍了用户注册功能开发具有一定的参?#25216;?#20540;?#34892;?#36259;的小伙伴们可以参?#23478;?#19979;
        2017-04-04
      • Python用for循环实现九九乘法表

        Python用for循环实现九九乘法表

        本文通过实例代码给大家介绍了Python用for循环实现九九乘法表的方法代码简单易懂非常不错具有一定的参考借鉴价值需要的朋友参考下吧
        2018-05-05
      • python 动态获取当前运行的类名和函数名的方法

        python 动态获取当前运行的类名和函数名的方法

        这篇文章主要介绍了python 动态获取当前运行的类名和函数名的方法,分别介绍使用内置方法sys模块修饰器inspect模块等方法,需要的朋友可以参考下
        2014-04-04
      • Python中作用域的深入讲解

        Python中作用域的深入讲解

        这篇文章主要给大家介绍了关于Python中作用域的相关资?#24076;?#25991;中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面随着小编来一起学习学习吧
        2018-12-12
      • 轻松掌握python设计模式之策略模式

        轻松掌握python设计模式之策略模式

        这篇文章主要帮助大家轻松掌握python设计模式之策略模式,具有一定的参?#25216;?#20540;?#34892;?#36259;的小伙伴们可以参?#23478;?#19979;
        2016-11-11
      • Python中关于字符串对象的一些基础知识

        Python中关于字符串对象的一些基础知识

        这篇文章主要介绍了详解Python中的字符串对象,关于字符串的操作和特性是Python学习当中的基础知识,需要的朋友可以参考下
        2015-04-04
      • Python过滤txt文件内重复内容的方法

        Python过滤txt文件内重复内容的方法

        今天小编就为大家分享一篇Python过滤txt文件内重复内容的方法具有很好的参?#25216;?#20540;希望对大家有所帮助一起跟随小编过来看看吧
        2018-10-10
      • 编写Python CGI脚本的教程

        编写Python CGI脚本的教程

        这篇文章主要介绍了编写Python CGI脚本的教程,CGI是Python和服务器软件连接的接口,需要的朋友可以参考下
        2015-06-06
      • 深入理解Python 代码优化详解

        深入理解Python 代码优化详解

        本文初?#25945;教?#20102; python 常见的性能优化技巧以及如何借助工具来定位和分析程序的性能瓶颈并提供了相关可以进行性能优化的工具或语言希望能够更相关人员一些参考
        2014-10-10

      最新评论

      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>