python中__init__和self以及‘main’
1、关于__main__
Python和java程序不同,不需要主程序来进行控制运行,,python执行都是从头执行到尾。
python中的很多程序都有这样一段:
1 if __name__ == '__main__':
2 statements
这段代码的主要作用主要是让该python文件既可以独立运行,也可以当做模块导入到其他文件。当导入到其他的脚本文件的时候,此时__name__的名字其实是导入模块的名字,不是’main’, main代码里面的就不执行了。
如果写一段程序 test_main.py:
def fun():
print('this is fun')
if __name__ == '__main__':
fun()
print('this is main')
执行时,得到
>>>
this is fun
this is main
此结果是执行了test_main.py的结果,但是如果将test_main.py作为一个模块引入:
>>>import test_main
得到结果就不是这样,执行test_main.py之后得到
>>>test_main.fun()
>this is fun
可以发现,‘main’中的部分并没有执行。
2、关于__init__和self
由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。以学生类为例,通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去:
class student(object):
def __init__(self,name,score):
self.name = name
self.score = score
注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。可以理解为初始化。
有__init__方法,创建实例的时候,就不能传入空参数,必须传入与__init__方法匹配的参数,但是self不需要传,Python解释器自己会把实例变量传进去:
>>>grade = student('Jason Bourn',99)
>>>grade.name
'Jason Bourn'
>>>grade.score
99
和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。
除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数.
参考文章
https://blog.csdn.net/fisherming/article/details/93468969
https://www.cnblogs.com/rianley/p/9013905.html