Python 入门 之 反射
Python 入门 之 反射
1、反射 : (自省)
 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。
Python面向对象中的反射:通过字符串的形式操作对象的相关属性。Python中的一切事物都是对象(都可以使用反射)
<1> getattr() 获取
<2> setattr() 设置
<3> hasattr() 判断是否存在
<4> delattr() 删除
(1)通过字符串操作对象的属性和方法
class A:
    def __init__(self,name):
        self.name = name
    def func(self):
        print("is A func")
a = A("rimo")
A.func()
print(a.name)
a.func()
(2)对象的角度使用反射
class A:
    def __init__(self,name):
        self.name = name
    def func(self):
        print("is A func")
a = A("rimo")
print(hasattr(a,"name"))  # 返回 True就是说明name这个属性在对象a中存在
print(getattr(a,"name"))
f = getattr(a,"func")
f()
setattr(a,"age",18)
print(a.__dict__)
delattr(a,"name")
print(a.__dict__)
(3)类的角度使用反射
class A:
    def __init__(self,name):
        self.name = name
    def func(self):
        print("is A func")
a = A("rimo")
print(hasattr(A,"name"))
f = getattr(A,"func")
f(11)
(4)当前模块使用反射
def func():
    print("is func")
# 当前模块:
print(globals()["func"])
import sys
o = sys.modules[__name__]   # 获取当前模块名对应的对象
f = getattr(o,"func")
f()
(5)其他模块使用反射
import test       # 导入模块
test.func()
o = globals()["test"]
getattr(o,"func")()
(6)反射的应用场景
class Blog:
    def login(self):
        print("is login")
    def register(self):
        print("is register")
    def comment(self):
        print("is comment")
    def log(self):
        print("is log")
    def log_out(self):
        print("is log_out")
b = Blog()
func_dic = {
    "1":b.login,
    "2":b.register,
    "3":b.comment,
    "4":b.log,
    "5":b.log_out
}
msg = """
1.登录
2.注册
3.评论
4.日志
5.注销
"""
choose = input(msg)
if choose in func_dic:
    func_dic[choose]()
将上述代码进行修改,减少代码(通过字符串操作对象的属性和方法)
class Blog:
    def login(self):
        print("is login")
    def register(self):
        print("is register")
    def comment(self):
        print("is comment")
    def log(self):
        print("is log")
    def log_out(self):
        print("is log_out")
b = Blog()
msg = """
login
register
comment
log
log_out
"""
while 1:
    choose = input(msg)
    if hasattr(b,choose):
        getattr(b,choose)()
    else:
        print("请重新输入!")
Python 入门 之 反射的更多相关文章
- python中的反射
		在绝大多数语言中,都有反射机制的存在.从作用上来讲,反射是为了增加程序的动态描述能力.通俗一些,就是可以让用户参与代码执行的决定权.在程序编写的时候,我们会写很多类,类中又有自己的函数,对象等等.这些 ... 
- Python基础之反射
		python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. ... 
- python入门简介
		Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ... 
- python入门学习课程推荐
		最近在学习自动化,学习过程中,越来越发现coding能力的重要性,不会coding,基本不能开展自动化测试(自动化工具只是辅助). 故:痛定思痛,先花2个星期将python基础知识学习后,再进入自动化 ... 
- Python运算符,python入门到精通[五]
		运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是“+”.在计算器语言中运算符大致可以分为5种类型:算术运算符.连接运算符.关系运算符.赋值运 ... 
- Python基本语法[二],python入门到精通[四]
		在上一篇博客Python基本语法,python入门到精通[二]已经为大家简单介绍了一下python的基本语法,上一篇博客的基本语法只是一个预览版的,目的是让大家对python的基本语法有个大概的了解. ... 
- Python基本语法,python入门到精通[二]
		在上一篇博客Windows搭建python开发环境,python入门到精通[一]我们已经在自己的windows电脑上搭建好了python的开发环境,这篇博客呢我就开始学习一下Python的基本语法.现 ... 
- visual studio 2015 搭建python开发环境,python入门到精通[三]
		在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo, ... 
- python入门教程链接
		python安装 选择 2.7及以上版本 linux: 一般都自带 windows: https://www.python.org/downloads/windows/ mac os: https:/ ... 
随机推荐
- JavaWeb_(Hibernate框架)Hibernate中重要的api
			Hibernate中重要的api Configuration SessionFactory Session(重点) Transaction 在Dao层中UserDao.java使用Hibernate向 ... 
- css垂直居中布局总结
			简介 总结记录一下经常需要用到垂直居中布局,欢迎补充(空手套...O(∩_∩)O) 以下栗子如果未特别标注同一使用这样的html结构 <div class="container&quo ... 
- 【面试】SSH 框架原理
			SSH 框架原理: 1.通过 Configuration().configure();读取并解析 hibernate.cfg.xml 配置文件2.由 hibernate.cfg.xml中的<ma ... 
- SpringMVC 基础内容及使用步骤
			MVC介绍 mvc是一个众所周知的以设计界面应用程序为基础的设计模式. 它主要通过分离模型.视图及控制器在应用程序中的角色将业务编辑从界面中解耦. MVC的核心思想是将业务逻辑从界面中分离出来,允许它 ... 
- git    撤销修改和版本回退
			1. 工作区 文件只是在工作区进行了修改,还没有提交到暂存区(未进行 git add 操作) 此时可以使用 git checkout -- filename 撤销工作区文件的修改 效果相当 ... 
- js中的事件委托技术
			1.什么是事件委托:通俗的讲,时间就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个时间本来是加在某些元素上的,然而你却加到别人身上来做,完成这 ... 
- 查看HearthBuddy.exe文件是x86还是x64版本
			https://www.cnblogs.com/chucklu/p/10020221.html 使用Powershell查看 PS C:\repository\GitHub\ChuckLu\Test\ ... 
- vscode+python+flake8+cmder配置
			{ "window.zoomLevel": 0, "[python]": {}, "kite.showWelcomeNotif ... 
- 使用 Itext 生成PDF
			一.生成PDF,所需jar包(itext-2.0.8.jar,iTextAsian.jar) 在springboot中只需要引入依赖即可,依赖代码如下: <dependency> < ... 
- iOS 修改打包后的.ipa应用名字
			一.修改应用的名字 二.重新签名 下面详细介绍介绍两个步骤: 1.修改应用的名字: 1).解压.ipa文件,在Payload文件夹下有一个.app文件(如下图:)选中.app文件,右键点击“显示包内容 ... 
