也就是当该类被实例化的时候就会执行该函数。那么咱们就能够把要先初始化的属性放到这个函数里面。以下程序:java
析构函数: python
上图中的“__del__”就是一个析构函数了,当使用del 删除对象时,会调用他自己的析构函数,另外当对象在某个做用域中调用完毕,在跳出其做用域的同时析构函数也会被调用一次,这样能够用来释放内存空间。c++
__del__()也是可选的,若是不提供,则Python 会在后台提供默认析构函数算法
—————————————————————————分割线——————————————————————————————————编程
一:函数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