前言:
Python POC编写 的第三篇 ,
魔法方法。
目录:
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)
总结
第三篇 完。
感觉后续还需要补充一些。