Python学习笔记 如何理解__init__方法和self参数

学习Python的朋友肯定会经常接触到init方法和self参数,那么Python中的init方法和self参数分别指的是什么?又有什么意义呢?

Python学习笔记 如何理解init方法和self参数

init方法

init是在类创建的时候自动被执行的,这个函数在定义类的时候默认已经存在。
init()方法意义重大的原因有两个。第一个原因是在对象生命周期中初始化是最重要的一步;每个对象必须正确初始化后才能正常工作。第二个原因是init()参数值可以有多种形式。它的应用有两个:
在超类中实现init()
我们通过实现init()方法来初始化对象。当一个对象被创建,Python首先创建一个空对象,然后为那个新对象调用init()方法。这个方法函数通常用来创建对象的实例变量并执行任何其他一次性处理。
使用init()创建显式常量
在某些情况下,我们会有一个在初始化或配置文件中创建的常量对象池,或者我们可以基于命令行参数显示创建常量对象,如:

1
2
3
4
class demon:
def __init(self,name,symbol):
self.name=name
self.symbol=symbol

另外,python的每个模块的包中,都存在一个init.py文件(别和init()方法弄混淆),有了这个文件,我们才能导入这个目录下的module.
其实,init.py里面还可以有其他内容,我们在导入一个包时,实际上导入了它的一个init.py文件。
我们可以再在initpy文件中再导入其他的包,或者模块。
init.py中海油一个重要的变量,叫做all,可以使用它实现全部导入:
from PackageName import *

self参数

Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值 (显胜于隐 的引发)。Python的类的方法的这个特别的参数指代的是对象本身,而按照Python的惯例,它用self来表示。
self在Python里不是关键字,而是代表当前对象的一个实例。使用self能避免非限定调用造成的全局变量。
相信结果过C++的同学这时会想到C++中的this指针,self和this有着本质的区别,self代表的是一个对象的实例,this为指针,为当前对象的地址。但是在Python中将self改为this也不会报错,但为了书写规范,建议函数使用self.
对于self参数,需要注意三点:
self在定义时需要定义,但是在调用时会自动传入。
self的名字并不是规定死的,但是最好还是按照约定是用self
self总是指调用时的类的实例。

1