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:/ ...
随机推荐
- 1.Linux常用命令大全
系统信息 arch 显示机器的处理器架构uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) h ...
- Android_(控件)使用ListView显示Android系统中联系人信息
使用ListView显示手机中联系人的姓名和电话号码 父类布局activity_main.xml,子类布局line.xml(一个文件的单独存放) 运行截图: (避免泄露信息对部分地方进行了涂鸦O(∩_ ...
- centos 链接错误解决方法
执行除cd sln以外任何指令都报错,解决方法:sln /usr/lib64/ld-2.17.so /usr/lib64/ld-linux-x86-64.so.2 LD_PRELOAD=/lib64/ ...
- Linux 变量 $$ $! $? $- $# $* $@ $0 $n
[参考文章]:linux中shell变量$#,$@,$0,$1,$2的含义解释 1. 变量说明 1.1 $$ Shell本身的PID(ProcessID) 1.2 $! Shell最后运行的后台Pro ...
- (九)C语言之scanf
- redis数据类型为key的常用命令
redis默认自带16个库select 7切换到redis第8个数据库dbsize查看reids有几个keykeys *查看所有k,vclear清空控制台FLUSHDB清空当前数据库的kvFLUSHA ...
- nodejs相关
安装: 1:下载 Node.js 安装包及源码下载地址为:https://nodejs.org/en/download/. 32 位安装包下载地址 : https://nodejs.org/dist/ ...
- java+实现文件的上传和下载
项目截图 路径配置 将localhost:8080/up6全部替换为实际项目路径 使用mysql文件夹下的脚本创建数据表. 创建后可以在数据库中看到创建好的数据表 2.修改数据库连接 3.修改上传地址 ...
- MySQL使用order by field()自定义排序
MySQL的自定义排序和Oracle相比,要简单得多. 假设在表v_education的列schoolRecord中,有以下字段:'小学','初中','高中','专科','本科','硕士','博士'. ...
- C# 反转单向链表
static void Main(string[] args) { Mynode mynode0 = new Mynode(); Mynode mynode1 = new Mynode(); Myno ...