Python 映射
python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员、获取成员、设置成员、删除成员。
获取成员: getattr
class Foo:
def __init__(self, name, age):
self.name = name
self.age = age
obj = Foo('klvchen', 18)
inp = input('>>>')
v = getattr(obj, inp)
print(v)
运行结果:
>>>name
klvchen
class Foo:
def __init__(self, name, age):
self.name = name
self.age = age
def show(self):
return "%s-%s" %(self.name, self.age)
obj = Foo('klvchen', 18)
func = getattr(obj, 'show')
print(func)
res = func()
print(res)
运行结果:
<bound method Foo.show of <__main__.Foo object at 0x00000234F6942588>>
klvchen-18
检查是否含有成员: hasattr
class Foo:
def __init__(self, name, age):
self.name = name
self.age = age
def show(self):
return "%s-%s" %(self.name, self.age)
obj = Foo('klvchen', 18)
print(hasattr(obj, 'name1'))
运行结果:
False
设置成员: setattr
class Foo:
def __init__(self, name, age):
self.name = name
self.age = age
def show(self):
return "%s-%s" %(self.name, self.age)
obj = Foo('klvchen', 18)
# print(hasattr(obj, 'name1'))
setattr(obj, 'key', 'value')
print(obj.key)
运行结果:
value
删除成员: delattr
class Foo:
def __init__(self, name, age):
self.name = name
self.age = age
def show(self):
return "%s-%s" %(self.name, self.age)
obj = Foo('klvchen', 18)
print(obj.name)
delattr(obj, 'name')
print(obj.name)
运行结果:
klvchen
AttributeError: 'Foo' object has no attribute 'name'
通过字符串的形式操作对象中的成员
class Foo:
stat = '666'
def __init__(self, name, age):
self.name = name
self.age = age
res = getattr(Foo, 'stat')
print(res)
运行结果:
666
# 创建两个文件,s1.py 和 s2.py
# s2.py 内容如下:
NAME = 'klvchen'
def func():
return 'func'
# s1.py 内容如下:
import s2
res1 = getattr(s2, 'NAME')
print(res1)
res2 = getattr(s2, 'func')
result = res2()
print(result)
#运行 s1.py 文件:
klvchen
func
# 创建两个文件,s1.py 和 s2.py
# s2.py 内容如下:
NAME = 'klvchen'
def func():
return 'cwe'
class Foo:
def __init__(self):
self.name = 666
# s1.py 内容如下:
import s2
res1 = getattr(s2, 'NAME')
print(res1)
res2 = getattr(s2, 'func')
result = res2()
print(result)
cls = getattr(s2, 'Foo')
print(cls)
obj = cls()
print(obj)
print(obj.name)
#运行 s1.py 文件,运行结果:
klvchen
cwe
<class 's2.Foo'>
<s2.Foo object at 0x000001CFCDBB2438>
666
# 创建两个文件,s1.py 和 s2.py
# s2.py 内容如下:
def f1():
return '首页'
def f2():
return '新闻'
def f3():
return '精华'
# s1.py 内容如下:
import s2
inp = input('请输入要查看的URL: ')
if hasattr(s2, inp):
func = getattr(s2, inp)
result = func()
print(result)
else:
print('404')
#运行 s1.py 文件,运行结果:
请输入要查看的URL: f1
首页
参考 http://www.cnblogs.com/wupeiqi/articles/5017742.html
Python 映射的更多相关文章
- python 映射列表 学习
列表映射是个非常有用的方法,通过对列表的每个元素应用一个函数来转换数据,可以使用一种策略或者方法来遍历计算每个元素. 例如: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- 精通 Oracle+Python,第 1 部分:查询最佳应践
原文链接:http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python-1391323-zhs.html 在 Py ...
- Python os.md
os 便携式访问操作系统的特定功能.os模块提供了对特定平台模块(如posix, nt, mac)的封装, 函数提供的api在很多平台上都可以相同使用, 所以使用os模块会变得很方便. 但不是所有函数 ...
- python操作oracle数据库-查询
python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...
- python中括号知识点
Python语言中括号分为几个类型,常见的三个圆括号是圆括号().中间圆括号[]和大括号.它的函数也不同,代表不同的Python基本内置数据类型. python括号 python()中的括号:表示tu ...
- 第一章:Hello, World!
感谢作者 –> 原文链接 本文翻译自The Flask Mega-Tutorial Part I: Hello, World! 一趟愉快的学习之旅即将开始,跟随它你将学会用Python和Flas ...
- Flask 教程 第一章:Hello, World!
本文翻译自The Flask Mega-Tutorial Part I: Hello, World! 一趟愉快的学习之旅即将开始,跟随它你将学会用Python和Flask来创建Web应用.上面的视频包 ...
- six库 解决python2的项目如何能够完全迁移到python3
six库 解决python2的项目如何能够完全迁移到python3 SIX是用于python2与python3兼容的库. 它存在的目的是为了拥有无需修改即可在Python 2和Python 3上同时工 ...
- 使用six库将Python2的项目完全转移到python3
SIX是用于python2与python3兼容的库. 它存在的目的是为了拥有无需修改即可在Python 2和Python 3上同时工作的代码.话虽这么说,但是这并不代表在Python 3中引用该库就可 ...
随机推荐
- iOS中的HTTPS
在WWDC 15,Apple提出的ATS (App Transport Security) ,是 Apple 在推进网络通讯安全的一个重要方式.在 iOS 9 和 OS X 10.11 中,默认情况下 ...
- Ngon 是啥
https://www.gamefromscratch.com/post/2011/07/11/So-whats-an-ngon-anyways.aspx 在 blender 里面 Add 一个 Cy ...
- Javascript高级编程学习笔记(5)—— JS操作符
话不多说,开始今天的码字之旅. 突然有种日更小说的感觉,emm... 操作符 ECMAScript(JS核心)描述了一组用于操作数据值的操作符,也包括算术操作符等等 而JS中这些操作符最鲜明的特点就是 ...
- JavaScript学习之路-语法
版权声明:未经博主允许不得转载 在JavaScript中如何写语法呢?这里你可以去看一些教学文档来得快一些,这里不介绍,有点基础的也可以复习一下. //定义变量并赋值 var a; //定义变量 va ...
- dubbo rpc调用,接收到的bean为null原因?
前几天对接公司内部其他部门的系统,用dubbo调用,dubbo看起来很简单,但是却让我们调试了好久啊! 下面是调试纪录: 1. 调用该服务时,直接调不通,查看错误为 no provider ? 然后就 ...
- 移动端h5页面的那些坑
最近一直在写移动端页面,由于之前写移动端写的比较少,所以此次踩过许多坑.特此总结一下: 1.<input type='button'>背景色在ios中的兼容性,颜色发白 解决办法:在全局样 ...
- Liferay7 BPM门户开发之21: 理解消息总线(Message Bus)体系
Liferay Message Bus提供了松耦合的消息发送接收机制(生产和消费的设计模式),用于本地服务,不支持远程服务,支持集群. 主要用途: 两个或多个插件之间的通讯. 在事件中发送搜索索引,比 ...
- 线程误区-join,wait(里边还是调用的wait)
1.一个线程执行结束后会执行该线程自身对象的notifyAll方法,这个是在jvm中实现的. 2.join的作用是:当我们调用某个线程的这个方法时,这个方法会挂起调用线程,直到被调用线程(thread ...
- css选择符权重
css选择符权重 目录 css选择符权重 css选择器权重列表 CSS选择符冲突处理 css选择符权重 css选择器权重列表 选择器 权重 内联样式 1000 ID 0100 CLASS 0010 属 ...
- 疫苗:JAVA HASHMAP的死循环
在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环.这个事情我4. ...