Python 构造函数、 Python 析构函数、Python 垃圾回收机制

构造函数与析构函数
构造函数:
用于初始化类的内容部状态,Python提供的构造函数式 __init__();

也就是当该类被实例化的时候就会执行该函数。那么咱们就能够把要先初始化的属性放到这个函数里面。以下程序:java

    

__init__()方法是可选的,若是不提供,Python 会给出默认的__init__方法
通常数据的获取须要定义的get和set方法
 

析构函数: python

上图中的“__del__”就是一个析构函数了,当使用del 删除对象时,会调用他自己的析构函数,另外当对象在某个做用域中调用完毕,在跳出其做用域的同时析构函数也会被调用一次,这样能够用来释放内存空间。c++

__del__()也是可选的,若是不提供,则Python 会在后台提供默认析构函数算法

若是要显式的调用析构函数,可使用del关键字,方式以下:
del对象名
 
 
垃圾回收机制
Python 采用垃圾回收机制来清理再也不使用的对象;Python 提供gc模块释放
再也不使用的对象,Python 采用‘引用计数’ 的算法方式来处理回收,
即:当某个对象在其做用域内再也不被其余对象引用的时候,Python 就自动清除对象;
Python 的函数collect()能够一次性收集全部待处理的对象(gc.collect())

—————————————————————————分割线——————————————————————————————————编程

一:函数c#

  若是你须要在程序中重用代码,---------定义函数。 def 函数名(参数)://todo函数

  如:测试

  输出:this

   也能够将函数的参数定义为默认参数,注:默认参数通常放参数的最后,如:spa

  

输出:

二:类

类的定义应该是放在面向对象的标题里,可是咱们通常函数定义在类里面,从这个范围来讲,我在这记录了类。

类和对象是面向对象编程的两个主要方面。类:建立一个新类型,而对象是这个类的实例,类使用class关键字建立。类的域和方法被列在一个缩进块中。

注意:在python语言中,无论什么类型的实例都被看作对象,如整数也被做为对象看待,它属于int类,这和其余语言c++,java把整数纯粹做为类型是不一样的。

”域“的概念:

属于一个对象或类的变量被称为域,其实就是类里面定义的变量

——类的变量和对象的变量

1类的变量:由一个类的全部对象(实例)共享使用,只有一个类变量的拷贝,因此当某个对象对类的变量作了改动的时候,这个改动会反映到全部其余的实例上。我理解为:其实它就是一个类的全局变量,类实例化后的对象均可以调用该变量。

2:对象的变量: 由类的每一个对象/实例拥有。所以每一个对象有本身对这个域的一份拷贝,即它们不是共享的,在同一个类的不一样实例中,虽然对象的变量有相同的名称,可是是互不相关的。我理解的是:不一样的对象调用该变量,其值改变后互不影响,跟C#的语法同样,我还由于不理解第一点纠结了半天 !

属于类级别的变量,在使用它的时候必定要带上类型名字 好比 MyClass.count

属于每一个对象级别的变量,在调用的时候必定要带上self代表属于当前对象。self.name

如:

输出:

 

域(变量)和方法(函数)能够合称为类的属性

类的方法

类的方法普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,可是在调用这个方法的时候你为这个参数赋值,Python会提供这个值。这个特别的变量指对象自己,按照惯例它的名称是self。(相似于c#的this指针)

如:

__init__方法:属于python语言的构造函数,一个类只能有一个__init__方法

__del__方法属于python语言的析构函数,它在对象消逝的时候被调用。

当对象再也不被使用时,__del__方法运行,可是很难保证这个方法究竟在 何时 运行。若是你想要指明它的运行,你就得使用del语句

三:模块

模块:若是你想要在其余程序中重用不少函数--------定义模块。其实就是不少的类型,不少的方法集合在一个或多个文件中,经过import ** 载入,相似于c#中的dll

模块基本上就是一个包含了全部你定义的函数和变量的文件。为了在其余程序中重用模块,模块的文件名必须.py为扩展名。

注意:每一个模块都有本身的名称__name__,__name__做为模块的内置属性,它的做用就是检测.py文件的调用方式,而后根据__name__作出相应的处理。

模块有两种调用方式:1:被import载入调用  2:直接使用

若是模块直接执行,__name__="__main__";  一般,此语句用于模块测试中使用。

例如:定义一模块名字为MyModule.py

直接运行输出:

经过其余模块调用:

调用模块代码:

间接调用运行输出:

 

导入部分类,函数及变量,可使用from...import...   例如 from MyModule import ModuleClass

相关文章
相关标签/搜索