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. SQL Server使用证书最小粒度授权

    最近在项目中某个功能遇到了阻塞造成的Time out错误.所以需要在执行该功能的时候开启一个线程检测SQL Server中阻塞会话.但是程序本身使用的sql帐号本身不具备VIEW Sever Stat ...

  2. 背水一战 Windows 10 (66) - 控件(WebView): 监听和处理 WebView 的事件

    [源码下载] 背水一战 Windows 10 (66) - 控件(WebView): 监听和处理 WebView 的事件 作者:webabcd 介绍背水一战 Windows 10 之 控件(WebVi ...

  3. python 使用多线程进行并发编程/互斥锁的使用

    import threading import time """ python的thread模块是比较底层的模块,python的threading模块是对thread做了 ...

  4. poj1149构图题

     引题解: 这道题目的大意是这样的:⦁ 有 M 个猪圈(M ≤ 1000),每个猪圈里初始时有若干头猪.⦁ 一开始所有猪圈都是关闭的.⦁ 依次来了 N 个顾客(N ≤ 100),每个顾客分别会打开指定 ...

  5. vue-cli脚手架项目按需引入elementUI

    https://www.jianshu.com/p/40da0ba35ac1 Couldn't find preset "es2015" relative to directory ...

  6. Go语言数据类型

    目录 基本数据类型说明 整型 浮点型 字符 字符类型本质探讨 布尔型 字符串 指针 值类型与引用类型 基本数据类型默认值 基本数据类型相互转换 注意事项 其他基本类型转string类型 string类 ...

  7. 锚接口(上)——hashchange api 和 $.uriAnchor

    概述 这是我在单页Web应用这本书上看到的方法,并深入的研究了一下,把结果记录在下面,供以后开发时参考,相信对其它人也有用. 说明一下,这个方法已经过时了,H5有更新的方法:history api,我 ...

  8. LeetCode--No.013 Roman to Integer

    13. Roman to Integer Total Accepted: 95998 Total Submissions: 234087 Difficulty: Easy Given a roman ...

  9. __getattr__()

    定义了__getattr__(),当访问object不存在的属性时会调用该方法 不定义访问不存在的属性时会报 AttributeError eg: class Cat(object): def __i ...

  10. Mac 常用软件下载及使用教程地址推荐

    知您网: http://www.zhinin.com Xclient:http://xclient.info/?t=40707b872b81127fdfd1dc4700d1a155c12f35bd 音 ...