码迷,mamicode.com
首页 > 编程语言 > 详细

python学习笔记-Day5(反射、特殊方法、OS模块)

时间:2016-06-15 23:36:36      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

反射

# 反射(或叫自省): 有时候我们会碰到这样的需求,需要执行对象的某个方法,或是需要对对象的某个字段赋值,而方法名或是字段名在编码代码时并不能确定,需要通过参数传递字符串的形式输入
# 这就是我们反射功能: 通过字符串形式去调用对象

# 例, 我有一个导向页面commons.py
def login():
    print(登录)

def home():
    print(HOME PAGE)

def logout():
    print(logout !!!)

# 我需要根据用户输入,去执行对应功能,使用反射就可以这么写
# index.py
import commons
def run():
    inp = input(请输入要访问的url: )
    if hasattr(commons, inp): 
        func = getattr(commons,inp)
        func()
    else:
        print(404)

run()

# 例如,我在inp执行时输入login执行过程为下
# hasattr(commons, ‘login‘) ,表示commons.login是否存在,存在则返回True
# func = getattr(commons, ‘login‘) ,表示将commons.login对象完全赋值给func
# func() 调用执行对象

# 这里反射涉及两个内置函数:
# hasattr()  判断接收字符串是否存在
# getattr()  获取接收字符串对象
# 上边反射了,某个模块的函数,而实际我们还可以连模块一起反射
# __import__() 以字符串形式导入模块
# 这样我们就可以这样改下我们run()函数

def run():
    inp = input(请输入要访问的url: )  # 用户输入格式为  模块/函数
    m, f = inp.split(/)   # 将用户输入分为模块和函数
    obj = __import__(m)    # 以字符串形式导入模块
    if hasattr(obj, f):   # 判断模块中是否有此函数
        func = getattr(obj, f)   # 获取模块函数体
        func()   # 执行函数
    else:
        print(404)

# 反射中还有以下两个内置函数
# setattr() 找到模块中,再设置一个函数对象
# delattr() 找到模块中,删除函数对象

注意: 我们上边例子hasattr()、getattr()、setattr()、delattr(),都是至少传入两个参数的(对象、名字)

# __import__ 导入模块特例

s = lib.test
obj = __import__(s)
# 这时,import仅仅是import lib
# 要使用:
# obj = __import__(s, fromlist=True)
# 才可以支持多级目录式导入模块

特殊方法

__file__  # 本文件的相对路径
__package__ # 文件在你的相对哪个路径下

# 例如,我的程序如下
|--bin
|   |--test.py
|--index.py

# index.py
from bin import bin

print(bin.__package__)

==> bin  # 输出相对路径,就是这个,看起来毫无卵用的功能


__cache__ # 关于Pyc文件的特殊方法

OS模块

# 我的代码当前路径为:D:\MyCloud\oldboy\day6_0611


r = os.path.abspath(__file__)  # 当前文件的绝对路径
print(r)

==> D:/MyCloud/oldboy/day6_0611/test2.py

s = os.path.dirname(r) # 文件(或目录)所在的目录的相对路径
print(s)

==> D:\MyCloud\oldboy\day6_0611\test2.py
# 这里因为pycharm原因,默认显示绝对路径,应该你在哪个路径下,它就显示相对与你执行此程序的路径

sys.path.append(os.path.dirname(r))  # 将当前文件目录(r),添加到系统PATH变量

 

python学习笔记-Day5(反射、特殊方法、OS模块)

标签:

原文地址:http://www.cnblogs.com/coolking/p/5589344.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!