声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。
2.8 反射
2.8.1 反射的概念
java中的反射是指在代码执行期间动态获取类内部的结构信息(包括属性、方法、构造方法等成员信息)。java中需要利用一系列反射对象来获取相应的信息,是比较复杂的。
而python中的反射含义与java一样,但python提供了一系列可以执行反射功能的函数,可以很方便地利用字符串获取指定的类成员。python中的反射本质是基于字符串的事件驱动。
2.8.2 反射的相关函数(参考链接:https://blog.csdn.net/qq_41775769/article/details/113527799)
python中常用的反射相关的函数如下:
- hasattr(object,‘attrName’):判断该对象是否有指定名字的属性或方法,返回值是bool类型;
- setattr(object,‘attrName’,value):给指定的对象添加属性以及属性值;
- getattr(object,‘attrName’):获取对象指定名称的属性或方法,返回值是str类型;
- delattr(object,‘attrName’):删除对象指定名称的属性或方法值,无返回值。
使用示例如下:
'''
模拟网站,根据输入字符串进入相应的网页
'''
# 定义网站类如下:
class WebSite:
def register(self):
print("欢迎来到注册页面")
def login(self):
print("欢迎来到登录页面")
def home(self):
print("欢迎进入主页")
def about(self):
print("关于我们")
def error(self):
print("404 No Found!")
# 如果不使用反射,代码如下:
page = WebSite()
while True:
choose = input("请输入你要进入的页面>>>")
if choose == 'register':
page.register()
elif choose == 'login':
page.login()
elif choose == 'home':
page.home()
elif choose == 'about':
page.about()
else:
page.error()
# 如果使用反射函数,代码如下:
page = WebSite()
while True:
choose = input("请输入你要进入的页面>>>")
# 反射机制实现上述功能,优化代码结构
if hasattr(page,choose):
f = getattr(page,choose)
else:
page.error()