name
__name__
是系统定义的内部函数,
它的作用是识别模块。
通常我们看到这样一句话:
if __name__ == '__main__'
__name__
的值有两种情况,那么挨个来说下。
如果模块是被直接执行的 ,那么 __name__
的值 为 __main__
例如:
def test(): print '__name__ = '__name__ if __name__ == '__main__': test()
定义一个 test() 函数,
那么这个函数是被执行的,
则 __name__
就会变为 __main__
如果模块是被导入的,那么 __name__
的值 为 模块的名字,
例如:
import sys def test(): print '__name__ = '__name__ if __name__ == '__main__': test()
使用 import函数 导入sys模块,
__name__
的值 就是 sys
main
__main__
是顶层代码执行的作用域的名称。
模块的 __name__
在通过标准输入、脚本文件或是交互式命令读入的时候会等于 __main__
,
模块可以通过检查自己的 __name__
来得知是否运行在 main
作用域中。
__main__
一般跟 __name__
连用,不会单独使用。
init
__init__
方法是一个特殊的方法(init是单词初始化initialization的省略形式),
它的作用是在使用类创建对象之后被执行,用于给新创建的对象初始化属性用。
举个粟子:
class test: def __init__(self, n, a): self.name = name # 初始化属性 self.age = age # 初始化属性 print("test")
self 表示对象本身,谁调用,就表示谁,
n 和 a 是自定义的变量名称,随便取啥都行。
这里 self.name = n
和 self.age = a
表示将外部传来的 n 和 a ,赋值给self对象的 name 和 age 属性。
举个粟子:
>>> man = test("小明",18) # 实例化对象 >>> test # 输出 test ,说明在创建类的实例的时候,__init__ 方法就立马被调用了。 >>> self.name >>> '小明' >>> self.age >>> '18'
这里面,小明就是 n ,18 就是 a
在实例化对象的时候将他们分别赋值给 n 和 a
module
__module__
表示当前操作的对象在那个模块
此方法也有两个不同的结果。
如果当前模块为被调用模块的时候 打印当前模块的名称
例如:
class Person(object): def __init__(self): self.name = '张三' from test import Person # 从另一个文件中导入类Person obj = Person() print(obj.__module__) # 输出 test 即 输出模块
如果当前模块为顶层模块执行 则打印 __main__
例如:
def test(): pass print(test.__module__) # 打印 __main__
str
如果要把一个类的实例变成 str ,就需要实现特殊方法 __str__
python在调用 print() 打印实例化对象时,
会调用 __str__()
方法 ,如果 __str__()
方法中有返回值,就会打印其返回值。
__str__
方法 使用 return 作为返回值,而不是 print
例如:
class test: def __init__(self,name,age): self.name = name self.age = age def __str__(self): return "我是 __str__ 方法" # 实例化对象的时候有 return 会打印返回值 if __name__=="__main__": demo = test("张三",18) # 实例化对象 print(demo)