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++的 thisPython中的__init__
Python中,常会看到,很多类中,都有一个__init__函数。
下面就来解释一下,__init__的含义。
首先来看init单词本身,其含义是 初始化。
而__init__的含义,也如同其单词本意一样,用来初始化。
但是给谁初始化呢?
很明显,是给对应的类Class本身,去初始化。
我的 理解 pyton中 的 __init__类似与 C++中的构造函数 ,在 生成 实例对象的时候自动调用 。Python中的__
_
其实就是一个普通的标识符而已,之所以有这么神奇的效果,是因为交互模式下Python用sys.displayhook
这个函数干了一件很好玩的事:如果当前行的值不是None
,就把这个值赋给这个_
变量。这就带来了一个效果,你每输入一个表达式,
_
这个变量的值都回更新,你在交互模式下打个_
实际上就是显示这个变量的值,所以看起来的效果就是这个_
命令能回显上一个表达式的值。更多的是一种规范吧,如下(摘自http://www.cnblogs.com/yaksea/archive/2011/08/30/2159416.html):
_单下划线开头:弱“内部使用”标识,如:”from M import *”,将不导入所有以下划线开头的对象,包括包、模块、成员
单下划线结尾_:只是为了避免与python关键字的命名冲突
__双下划线开头:模块内的成员,表示私有成员,外部无法直接调用
双下划线开头双下划线结尾:指那些包含在用户无法控制的命名空间中的“魔术”对象或属性,如类成员的name 、doc、init、import、file、等。推荐永远不要将这样的命名方式应用于自己的变量或函数。
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__'"都不会成立的!
所以,下一行代码永远不会运行到!
//