python语言基础-2 面向对象-2.8 反射

声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值