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. Spring 使用javaconfig配置aop

    1.在xml中需要配置自动代理 /** * */ package com.junge.demo.spring.dao; import org.springframework.context.annot ...

  2. hiho 第六周 01背包

    简单的01背包,没有报名,这周的没有权限提交 #include<iostream> #include<memory.h> using namespace std; #defin ...

  3. Latex 模版生成会议论文 不显示Keywords,而是显示 Index Terms- ,改成Keywords 方法

    一. 不管显示何种内容,TEX 文件都是 \begin{IEEEKeywords} 关键词1.关键词2,..... \end{IEEEKeywords} 其中:模版文件 IEEETran.cls存在下 ...

  4. 使用gulp+bebal实现前端自动化es6转es5的构建

    说明:es6语法已经越来越普及,但是一些低版本的浏览器不支持es6的语法特性,所以我们在开发完前端项目后,往往需要统一把前端es6的代码编译成es5的代码.本文介绍的就是如何手动和自动的把es6转成e ...

  5. Scala微服务架构 一

    因为公司的一个项目需求变动会非常频繁,同时改动在可控范围内,加上产品同学喜欢一些超前思维,我们的CTO决定提前开启八门,使用微服务架构. 划重点 微服务架构主要特点: ==独立组件(自主开发升级)== ...

  6. Android开发工程师文集-1 小时学会Widget小组件开发

    前言 大家好,给大家带来Android开发工程师文集-1 小时学会Widget小组件开发的概述,希望你们喜欢 学会用Widget (小组件) Widget小组件很方便,很快捷,可以个性化,自己定制,相 ...

  7. Linux - 查看和更改系统字符集

    查看当前系统字符集 $ echo $LANG en_US.UTF-8 $ $ env |grep LANG LANG=en_US.UTF-8 $ $ locale |grep CTYPE LC_CTY ...

  8. springboot创建统一异常拦截器全局处理 异常

    1.创建Exception类 public class MyException extends RuntimeException { private ErrorCodeEnum errorCode; ...

  9. sql server 备份与恢复系列八 系统数据库备份与恢复分析

    一.概述 在前面讲过"sql server 备份与恢复系列"都是集中在用户数据库上.sql server还维护着一组系统数据库,这些系统数据库对于服务器实例的运行至关重要.在每次进 ...

  10. 在mpvue中使用map如何避坑

    最近在做一个需求,当用户放大地图到某个级别时,自动显示marker的callout标签,当小于这个缩放级别时,则隐藏callout.然而在我实现的过程中,却发现一个严重的问题:当我操作marker数据 ...