【整理】python 中 self, init, __ ,if __name__ == '__main__'

来源:互联网 发布:上海华讯网络 编辑:程序博客网 时间:2024/06/03 08:03

Python中的self

在Python中的类Class的代码中,常看到函数中的第一个参数,都是self。以及Class中的函数里面,访问对应的变量(读取或者写入),以及调用对应的函数时,都是

self.valueName

self.function()

的形式。下面就来解释一下self的含义:

self,英文单词意思很明显,表示自己,本身。

此处有几种潜在含义:

1.这里的自己,指的是,实例Instance本身。

2.同时, 由于说到“自己”这个词,都是和相对而言的“其他”而说的。

而此处的其他,指的是,类Class,和其他变量,比如局部变量,全局变量等。

此处的self,是个对象,Object。

是当前类的实例。

因此,对应的

self.valueName

self.function()

中的

valueName:表示self对象,即实例的变量。与其他的,Class的变量,全局的变量,局部的变量,是相对应的。

function:表示是调用的是self对象,即实例的函数。与其他的全局的函数,是相对应的。

其实 我的理解 这里的 self类似 c++的 this

Python中的__init__

Python中,常会看到,很多类中,都有一个__init__函数。

下面就来解释一下,__init__的含义。

首先来看init单词本身,其含义是 初始化。

而__init__的含义,也如同其单词本意一样,用来初始化。

但是给谁初始化呢?

很明显,是给对应的类Class本身,去初始化。

我的 理解 pyton中 的 __init__类似与 C++中的构造函数 ,在 生成 实例对象的时候自动调用 。

Python中的__

在Python中_其实就是一个普通的标识符而已,之所以有这么神奇的效果,是因为交互模式下Python用sys.displayhook这个函数干了一件很好玩的事:如果当前行的值不是None,就把这个值赋给这个_变量。
这就带来了一个效果,你每输入一个表达式,_这个变量的值都回更新,你在交互模式下打个_实际上就是显示这个变量的值,所以看起来的效果就是这个_命令能回显上一个表达式的值。

更多的是一种规范吧,如下(摘自http://www.cnblogs.com/yaksea/archive/2011/08/30/2159416.html):
_单下划线开头:弱“内部使用”标识,如:”from M import *”,将不导入所有以下划线开头的对象,包括包、模块、成员

单下划线结尾_:只是为了避免与python关键字的命名冲突

__双下划线开头:模块内的成员,表示私有成员,外部无法直接调用

双下划线开头双下划线结尾:指那些包含在用户无法控制的命名空间中的“魔术”对象或属性,如类成员的name docinitimportfile、等。推荐永远不要将这样的命名方式应用于自己的变量或函数。


Python中的 if __name__ == '__main__':

模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。

///////////////////////////////////////////////////////////////////////////////////////////////////

在cmd 中直接运行.py文件,则__name__的值是'__main__';

而在import 一个.py文件后,__name__的值就不是'__main__'了;

从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件

如:

#Test.py

class Test:

    def __init(self):pass

    def f(self):print 'Hello, World!'

if __name__ == '__main__':

    Test().f()

#End

 

你在cmd中输入:

C:>python Test.py

Hello, World!

说明:"__name__ == '__main__'"是成立的

 

你再在cmd中输入:

C:>python

>>>import Test

>>>Test.__name__                #Test模块的__name__

'Test'

>>>__name__                       #当前程序的__name__

'__main__'

无论怎样,Test.py中的"__name__ == '__main__'"都不会成立的!

所以,下一行代码永远不会运行到!

//////////////////////////////////////////////////////////////////////////////////











0 0
原创粉丝点击