python之禅中文,python之父是哪个国家

  python之禅中文,python之父是哪个国家

  python通过调用__init__()方法构造当前类的实例化对象。[创建对象时,python解释器默认调用__init__()方法]

  __ _ del _ _()方法的作用正好与__init__()方法相反,用来销毁实例化的对象。[删除对象时,python解释器默认调用__del__()方法]

  其实在编写程序的时候,如果之前创建的类实例化对象以后不再使用,最好在适当的地方手动销毁它,释放它所占用的内存空间(整个过程称为垃圾回收(简称GC))。

  大多数情况下,Python开发者不需要手动收集垃圾,因为Python有自动垃圾收集机制,可以自动销毁不用的实例对象。

  示例__del__():使用场景:

  1.删除对象时,python parser默认会调用__del__()方法,即在对象引用执行完毕后,python会自动调用__del__()方法。

  2.内存中的对象销毁(释放)时回调__del__()方法。

  示例1:类语言:

  def __init__(self):

  Print(调用__init__()方法来构造对象)

  def __del__(self):

  Print (Call __del__()销毁对象并释放其空间)

  clangs=CLanguage()

  del clangs的运行结果:

  【注1】:不能误认为只要实例对象调用__del__(),实例对象占用的内存空间就会被释放。例如:

  类别语言:

  def __init__(self):

  Print(调用__init__()方法来构造对象)

  def __del__(self):

  Print (Call __del__()销毁对象并释放其空间)

  clangs=CLanguage()

  #添加引用clangs对象的实例对象。

  cl=金属撞击声

  Del clangs #删除实例对象(实际上是实例对象的引用计数减1)

  打印( * * * * * * * * * * * * * *)运行结果:上面代码的最后一行输出信息,是在程序执行结束时调用__del__()方法输出的。

  说明:当程序中的其他变量(比如上面代码中的cl变量)引用实例对象时,即使手动调用__del__()方法,也不会立即执行该方法。这与Python的垃圾收集机制的实现有关。

  Python采用自动引用计数(ARC)实现垃圾收集机制。该方法的核心思想是,每个Python对象都将配置一个计数器,初始Python实例对象的计数器值都将为0。如果变量引用实例对象,计数器值将增加1,依此类推。相反,每当变量取消对实例对象的引用时,计数器将减1。如果Python对象的计数器值为0,则意味着没有变量引用Python对象,也就是说,程序不再需要它。这时候Python会自动调用__del__()方法来回收。

  以上面程序中的clangs为例。实际上,构建clangs实例对象的过程分为两步。首先调用该类中的__init__()方法构建该类的一个对象(称之为C,计数器为0),立即使用clangs作为创建的实例对象的引用(C的计数器值为1)。在此基础上,另一个cl变量引用clangs(实际上相当于引用CLanguage(),此时C的计数器再次为1)。此时如果调用del clangs语句,只会导致C的计数器减1(值变成1)。因为C的计数器值不为0,所以C不会被销毁(不会执行__del__()方法)。

  再比如:执行del cl语句时,被应用对象实例object C的计数器继续为-1(变成0),Python会自动把计数器为0的实例对象当作垃圾进行回收。

  类别语言:

  def __init__(self):

  Print(调用__init__()方法来构造对象)

  def __del__(self):

  Print (Call __del__()销毁对象并释放其空间)

  clangs=CLanguage()

  #添加引用clangs对象的实例对象。

  cl=金属撞击声

  Del clangs #删除实例对象(实际上是实例对象的引用计数减1)

  打印( * * * * * * * * * * * * )

  Del cl #删除实例对象(实际上,实例对象的引用计数减1)

  打印(-)运行结果:

  示例2:类用户:

  def __init__(自身,用户名):

  self.user=用户名

  打印(用户初始化成功-)

  定义获取信息(自身):

  打印(自己的用户)

  def __del__(self):

  打印(用户对象被回收-)

  if __name__==__main__ :

  #创建一个用户对象

  u=用户(用户名=XXX )

  #删除用户对象

  德尔乌

  打印( del U -)运行结果:

  代码解释:

  U=User()在内存中创建一个用户对象,并让变量u引用内存中的用户对象。

  U Del删除变量u,此时内存中的用户对象没有对它的变量引用,Python解析器会回调__del__()方法来回收内存。

  示例3:类用户:

  def __init__(自身,用户名):

  self.user=用户名

  打印(用户初始化成功-)

  定义获取信息(自身):

  打印(自己的用户)

  def __del__(self):

  打印(用户对象被回收-)

  if __name__==__main__ :

  u1=用户( XXX )

  u2=u1

  德尔u1

  打印( del u1 -)

  德尔u2

  打印( Delu2 -)运行结果:

  代码解析:

  U1=用户()创建一个内存来存储用户对象,变量U1指向这个内存。

  u2=u1这里创建了一个新的变量U2,U2指的是u1的内存地址。此时u1和u2都引用同一个内存地址。

  当del u1删除u1时,变量对用户对象的引用也被删除。此时,由于内存中的用户对象仍被u2引用,所以不会回收内存(不会回调__del__()方法)。

  del u2删除u2后,内存中的用户对象没有被引用的变量,然后解释器会回收内存,回调__del__()方法。

  例4:当实例对象的引用计数为0时,python解释器会自动调用__del__()销毁对象,回收内存空间。类别用户:

  def __init__(自身,用户名):

  self.user=用户名

  打印(用户初始化成功-)

  定义获取信息(自身):

  打印(自己的用户)

  def __del__(self):

  打印(用户对象被回收-)

  if __name__==__main__ :

  用户( XXX )。get_info()运行结果:

  期待陌生,拥抱惊喜。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: