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 映射的更多相关文章

  1. python 映射列表 学习

    列表映射是个非常有用的方法,通过对列表的每个元素应用一个函数来转换数据,可以使用一种策略或者方法来遍历计算每个元素. 例如: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  2. 精通 Oracle+Python,第 1 部分:查询最佳应践

    原文链接:http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python-1391323-zhs.html 在 Py ...

  3. Python os.md

    os 便携式访问操作系统的特定功能.os模块提供了对特定平台模块(如posix, nt, mac)的封装, 函数提供的api在很多平台上都可以相同使用, 所以使用os模块会变得很方便. 但不是所有函数 ...

  4. python操作oracle数据库-查询

    python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...

  5. python中括号知识点

    Python语言中括号分为几个类型,常见的三个圆括号是圆括号().中间圆括号[]和大括号.它的函数也不同,代表不同的Python基本内置数据类型. python括号 python()中的括号:表示tu ...

  6. 第一章:Hello, World!

    感谢作者 –> 原文链接 本文翻译自The Flask Mega-Tutorial Part I: Hello, World! 一趟愉快的学习之旅即将开始,跟随它你将学会用Python和Flas ...

  7. Flask 教程 第一章:Hello, World!

    本文翻译自The Flask Mega-Tutorial Part I: Hello, World! 一趟愉快的学习之旅即将开始,跟随它你将学会用Python和Flask来创建Web应用.上面的视频包 ...

  8. six库 解决python2的项目如何能够完全迁移到python3

    six库 解决python2的项目如何能够完全迁移到python3 SIX是用于python2与python3兼容的库. 它存在的目的是为了拥有无需修改即可在Python 2和Python 3上同时工 ...

  9. 使用six库将Python2的项目完全转移到python3

    SIX是用于python2与python3兼容的库. 它存在的目的是为了拥有无需修改即可在Python 2和Python 3上同时工作的代码.话虽这么说,但是这并不代表在Python 3中引用该库就可 ...

随机推荐

  1. SDWebImage之SDWebImageDownloaderOperation

    上篇讲了SDWebImageDownloader,从源码分析的过程中,我们知道,实际执行下载任务的是SDWebImageDownloaderOperation,本篇我们来看看SDWebImageDow ...

  2. WPF中TreeView的+-号和连线style的一种实现

    最近又开始跟WPF打交道,项目里面用到了TreeView这个控件.然后需要有一个连线的外观就像是这样 二话不说,百度了一下,找到一个实现, 通道. 把代码拷贝到项目里面,跑了一下,看上去还不错.但是这 ...

  3. HoloLens开发手记 - 使用Windows设备控制台 Using Windows Device Portal

    Windows设备控制台允许你通过Wi-Fi或USB来远程控制你的HoloLens设备.设备控制台是HoloLens上的一个Web Server,你可以通过PC的浏览器来连接到它.设备控制台包含了很多 ...

  4. [P1329] 数列

    设F[i,j]为长度为i是,前缀和为j的方案数. [转移] F[i,j] => F[i+1,j+i] F[i,j] => F[i+1,j-i] [原理] 由于A[0]=0,所以有A[1]= ...

  5. centos6.6 安装adb环境

    a.安装JDK环境 centos linux JAVA(openjdk)软件包名 1.java-1.7.0-openjdk (OpenJDK Runtime Environment) 2.java-1 ...

  6. HTTPS到底是个什么鬼?

    HTTPS随处可见,那么它到底是个什么鬼?本文我们一起来探讨一下HTTPS为什么是安全的,以及HTTPS连接建立的过程. 一.HTTPS为什么是安全的? HTTP使用明文通信,可能会被第三方窃听.篡改 ...

  7. Python必会的单元测试框架 —— unittest

    用Python搭建自动化测试框架,我们需要组织用例以及测试执行,这里博主推荐Python的标准库——unittest. unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那 ...

  8. Android中服务的生命周期与两种方式的区别

    服务的生命周期跟Activity的生命周期类似.但是生命周期甚至比你关注服务如何创建和销毁更重要,因为服务能够在用户不知情的情况下在后台运行. 服务的生命周期---从创建到销毁---可以被分为以下两个 ...

  9. [疑难杂症]__点击win10屏幕最上方的边界会莫名其妙打开Internet Explorer浏览器,不胜其烦(2次ps:已解决!!!).

    关于问题描述: 每次误点到屏幕上边界会莫名打卡Internet Explorer浏览器(一开始开以为是自带的Edge浏览器,后来在查找相关解决方法的时候才发现并不是同一款浏览器) 这个问题存在好久了, ...

  10. Java 范例 - 字节处理

    前言 Java 编程中常会遇到需要进行字节处理的地方,本篇文章就来探讨编程中会遇到的字节处理问题. 字节序 字节序(endianness)是对于多字节数据来说的,它描述了多字节数据存储的顺序,分为大端 ...