python学习笔记三包与模块、反射

1.库的安装与卸载

python有2种库:

  • 标准库:
    • time
    • os
    • sys
    • json
    • csv、datetime、config等等
  • 第三方的库:
    • xlrd
    • selenium
    • requests
    • PYMYSQL等等

在线安装库:pip3 install 库名称==

在线卸载库:pip3 uninstall 库名称

不知道库版本时可以这样写:pip3 install selenium=2.xx,就会返回所有2.0以上的版本号

离线安装的方式:

  • mysql....whl下载的是.whl结尾的文件:python install .whl
  • 下载压缩包,解压后,进入目录 python setup.py install

2.模块与模块之间的调用

一个python文件就是一个模块,包含:类、函数、变量

调用模块里的类、函数、变量:

from 模块(文件名) import *

#调用类里面的方法
per=Index() #先实例化Index类
per.hell()

#调用模块的函数
index()

#调用模块的变量
index

3.模块与包、包与包之间的调用

包与包之间的调用:

from package.module import *

from 包名.模块名(文件名) import *

4.反射

反射是一个很重要的概念,它可以把字符串映射到实例的变量或者实例的方法然后可以去执行调用、修改等操作。它有四个重要的方法:

  • getattr 获取指定字符串名称的对象属性,即根据字符串的形式去某个模块中寻找XX函数
  • setattr 为对象设置一个对象,即根据字符串的形式去某个模块中设置东西
  • hasattr 判断对象是否有对应的对象(字符串),即根据字符串的形式去某个模块中判断东西是否存在
  • delattr 删除指定属性,即根据字符串的形式去某个模块中删除东西

attr是属性英文的前几个字母,属性指的是类中类变量、实例变量和方法。但是要注意不能是私有的,如果你的变量是以“_”开头,那将无法获取。


先建一个login.py:

 1 #login.py
 2 
 3 def index()
 4     print u'欢迎访问XXX网站的首页'
 5 
 6 def login():
 7     print u'登录成功'
 8 
 9 def logout():
10     print u'退出登录'
class Person(object):
    def __int__()self:
        pass

    def info(self):
        print u'我是Person类的info的方法'

再建一个fh.py:

#fh.py

#通过__import__导入模板模块login,并且放在一个对象f中
f=__import__('login')

#通过对象f找login模块中index的字符串并且调用
f.index()

通过getattr的方式,来实现如上的实现过程,getattr简单的可以理解为:“依据字符串的形式去模块中寻找

指定的目标对象(模块中的函数,或者类中的方法)”,见实现的代码为:

import login

#调用login模块中的logout函数
f=getattr(login,'logout')  #找到函数
f()   #执行函数

如何通过反射的方式找到类中的方法并且调用它:

import login

obj=login.Person()  #实例化
if hasattr(obj,'info'):  #这个函数是否存在
    f=getattr(obj,'info')
    f()
else:
    print u'sorry'

设置函数:

语法

def setattr(p_object,name,value):
  pass
 1 import login
 2 
 3 #先实例化
 4 obj=login.Person()
 5 
 6 #设置退出方法
 7 f=setattr(obj,'exit','this is a exit method.')
 8 
 9 #查看exit函数是否存在
10 f2=hasattr(obj,'exit')
11 
12 print u'setattr后的结果',f2
13 
14 #删除exit
15 f3=delattr(obj,'exit')
16 
17 print u'验证模块中的变量是否被删除:',hasattr(obj,'exit')  #因为该exit已被删除,所以只能判断当前是否存在exit

实战:

 1 #!/usr/bin/env python
 2 #coding:utf-8
 3 
 4 
 5 url=raw_input(u'请模拟浏览器输入地址:
')
 6 
 7 #通过/对url进行拆分成模块和方法
 8 target_models,target_function=url.split('/')  
 9 
10 #导入模块
11 m=__import__(target_models)
12 
13 #判断函数是否存在与模块中
14 if hasattr(m,target_function):
15     target_function=getattr(m,target_function)  #获取函数
16     target_function()  #执行函数
17 else:
18     print 'Not Found 404 Page'


#例如
1.输入地址 login/index

2.地址拆分成
target_models=login,target_function=index
3.接着就是导入login模块
4.判断login模块中是否存在index函数,若存在,就获取并调用,输出:欢迎访问XXX网站的首页

原文地址:https://www.cnblogs.com/dydxw/p/14234967.html