当前位置: 首页 > news >正文

党建网站建设存在问题/搜索引擎排名的三大指标

党建网站建设存在问题,搜索引擎排名的三大指标,网站服务器容器,监理工程师查询系统入口强大的反射,我来给你领航 说到反射 - 很多小白的反应是:这是什么鬼? - 入门的菜鸟:都说不就三个__attr方法吗? - 深入学习者:fuck,好高深! - 真正的大牛:现在带你了解以下深度的反射 什么 …

强大的反射,我来给你领航

说到反射

- 很多小白的反应是:这是什么鬼?
- 入门的菜鸟:都说不就三个__attr方法吗?
- 深入学习者:fuck,好高深!
- 真正的大牛:现在带你了解以下深度的反射      什么
__setattr__
__hasattr__
__getattr__
__delattr__



    <div class="clear"></div><div class="postBody"><div id="cnblogs_post_body" class="blogpost-body"><p>&nbsp;</p>

一、前言

def f1():print('f1')def f2():print('f2')def f3():print('f3')def f4():print('f4')a = 1
test.py
import test as ssss.f1()
ss.f2()
print(ss.a)

 我们要导入另外一个模块,可以使用import.现在有这样的需求,我动态输入一个模块名,可以随时访问到导入模块中的方法或者变量,怎么做呢?

    imp = input(“请输入你想导入的模块名:”)CC = __import__(imp) 這种方式就是通过输入字符串导入你所想导入的模块 CC.f1()  # 执行模块中的f1方法

   上面我们实现了动态输入模块名,从而使我们能够输入模块名并且执行里面的函数。但是上面有一个缺点,那就是执行的函数被固定了。那么,我们能不能改进一下,动态输入函数名,并且来执行呢?

#dynamic.py
imp = input("请输入模块:")
dd = __import__(imp)
# 等价于import imp
inp_func = input("请输入要执行的函数:")f = getattr(dd,inp_func,None)#作用:从导入模块中找到你需要调用的函数inp_func,然后返回一个该函数的引用.没有找到就烦会Nonef() # 执行该函数

  上面我们就实现了,动态导入一个模块,并且动态输入函数名然后执行相应功能。

  当然,上面还存在一点点小问题:那就是我的模块名有可能不是在本级目录中存放着。有可能是如下图存放方式:

  

  那么这种方式我们该如何搞定呢?看下面代码:

dd = __import__("lib.text.commons")  #这样仅仅导入了lib模块
dd = __import__("lib.text.commons",fromlist = True)  #改用这种方式就能导入成功
# 等价于import config
inp_func = input("请输入要执行的函数:")
f = getattr(dd,inp_func)
f()

二、反射机制

  上面说了那么多,到底什么是反射机制呢?

  其实,反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!

  先来介绍四个内置函数:

1. getattr()函数是Python自省的核心函数,具体使用大体如下:
class A: 
def __init__(self): 
self.name = 'zhangjing'
#self.age='24'
def method(self): 
print"method print"Instance = A() 
print getattr(Instance , 'name, 'not find') #如果Instance 对象中有属性name则打印self.name的值,否则打印'not find'
print getattr(Instance , 'age', 'not find') #如果Instance 对象中有属性age则打印self.age的值,否则打印'not find'
print getattr(a, 'method', 'default') #如果有方法method,否则打印其地址,否则打印default 
print getattr(a, 'method', 'default')() #如果有方法method,运行函数并打印None否则打印default 2. hasattr(object, name)说明:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的)3. setattr(object, name, value)这是相对应的getattr()。参数是一个对象,一个字符串和一个任意值。字符串可能会列出一个现有的属性或一个新的属性。这个函数将值赋给属性的。该对象允许它提供。例如,setattr(x,“foobar”,123)相当于x.foobar = 1234. delattr(object, name)与setattr()相关的一组函数。参数是由一个对象(记住python中一切皆是对象)和一个字符串组成的。string参数必须是对象属性名之一。该函数删除该obj的一个由string指定的属性。delattr(x, 'foobar')=del x.foobar

 

  我们可以利用上述的四个函数,来对模块进行一系列操作.

r = hasattr(commons,xxx)判断某个函数或者变量是否存在
print(r)  setattr(commons,'age',18)  给commons模块增加一个全局变量age = 18,创建成功返回nonesetattr(config,'age',lambda  a:a+1)  //给模块添加一个函数delattr(commons,'age')//删除模块中某个变量或者函数

  注:getattr,hasattr,setattr,delattr对模块的修改都在内存中进行,并不会影响文件中真实内容。

三、实例

  基于反射机制模拟web框架路由

  需求:比如我们输入:www.xxx.com/commons/f1,返回f1的结果。

# 动态导入模块,并执行其中函数
url = input("url: ")target_module, target_func = url.split('/')
m = __import__('lib.'+target_module, fromlist=True)inp = url.split("/")[-1]  # 分割url,并取出url最后一个字符串
if hasattr(m,target_func):  # 判断在commons模块中是否存在inp这个字符串target_func = getattr(m,target_func)  # 获取inp的引用target_func()  # 执行
else:print("404")

 

 

  

  

 

https://www.cnblogs.com/vipchenwei/p/6991209.html
还差很多,等着更新。。。

转载于:https://www.cnblogs.com/pupilheart/p/10145903.html

http://www.jmfq.cn/news/4953907.html

相关文章:

  • 网站seo怎么优化/hs网站推广
  • 手机网站建站价格/企业网页设计报价
  • 上海团购网站建设/工具seo
  • 学做网站哪里学/百度广告点击一次多少钱
  • 加强网站建设/营销型网站建设的公司
  • 焦作网站建设公司哪家好/关键字参数
  • 在香港做网站需要什么软件/免费数据分析网站
  • 马鞍山建设集团有限公司网站/福州百度seo
  • 手机网站前端用什么做/免费百度下载
  • 怎样做投资与理财网站/腾讯会议开始收费
  • 供应邯郸专业做网站/合肥seo网站管理
  • 阿里云服务器网站备案/免费seo在线优化
  • 长春 网站建设/网站seo关键词排名
  • 跳转链接/windows优化大师官方下载
  • 长春网站制作最专业/厦门seo优化
  • 中国建设网查询平台网址/uc浏览器关键词排名优化
  • 怎么做网站赌博/百度指数爬虫
  • 用文字写美食个人网站设计作品/长春seo顾问
  • 网站优化检测工具/郑州seo建站
  • 做特产的网站开张怎么宣传/win10优化大师有用吗
  • 广东网站推广策略/seo门户网价格是多少钱
  • 甘肃最新消息今天/如何优化搜索引擎的准确性
  • 网站内页全是404/关键词代发排名首页
  • 织梦系统 子网站/百度快速收录权限域名
  • 中投中原建设有限公司网站/鹤壁网络推广哪家好
  • php网站开发工具有哪些/重庆放心seo整站优化
  • 一款可做引流的网站源码/关键词是网站seo的核心工作
  • 动易网站模板下载/苏州seo网站系统
  • 美食网站建设的意义/360网站推广客服电话
  • 简单的报价表模板/上海优化网站seo公司