面向对象核心编程之反射现象1

面向对象核心编程之反射现象1

八股文如下:

1.什么是反射?

2.反射怎么用?

3.什么情况下使用反射?

一.什么是反射?

1.反射定义:
      反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!

2.反射的作用:

  动态获得类的信息.

       让对象告诉我们相关信息(对象拥有属性,方法,已经对象所属的类等)

3.反射:

      Reflection

三.什么情况下使用反射?

我们浏览网页,都是从一个链接跳到另一个链接,那么,我现在有个需求:

1.输入"baidu",进入百度网页

2.输入"QQ",进入QQ网页

不使用反射:

class WebPage:
    def baidu(self):
        print("www.baidu.com")

    def qq(self):
        print("www.QQ.com")


web = WebPage()
while 1:
    content = input("请输入:")
    if content.lower() == "qq":
        web.qq()
    elif content.lower() == "baidu":
        web.baidu()
    else:
        print("输入有误!")
 

使用反射:

class WebPage:
    def baidu(self):
        print("www.baidu.com")

    def qq(self):
        print("www.QQ.com")


web = WebPage()

while 1:
    content = input("请输入:").lower()
    if hasattr(web,content):
        getattr(web,content)()
    else:
        print("输入有误!")

   总结:上面两段代码我们对比下,如果不使用反射,我要反问很多网站,是不是要写很多的elif 来判断?使用反射后,两句代码就能搞定!


问题1:什么是反射?
答:是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)
----简单的来说,反射就是指可以通过字符串的形式来操作对象的属性


问题2:反射有啥用?
答:其中一个应用场景就是人机交互页面,用户在键盘输入的一般都是字符串形式,传入界面当中,程序去寻找关于字符串的方法,从而去调用该方法!!
 

直接看代码吧!还是比较easy的!


反射、自省有四个方法:
1、  getattr()   获取
2、  hasattr()   判断
3、  setattr()   赋值
4、  delattr()   删除

实现通过字符串的形式,对对象里面的各种属性进行任意的操作!!

'''
问题1:什么是反射?
答:是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)
----简单的来说,反射就是指可以通过字符串的形式来操作对象的属性
问题2:反射有啥用?
答:其中一个应用场景就是人机交互页面,用户在键盘输入的一般都是字符串形式,传入界面当中,程序去寻找关于字符串的方法,从而去调用该方法!!
'''

'''
反射、自省有四个方法:
1、  getattr()   获取
2、  hasattr()   判断
3、  setattr()   赋值
4、  delattr()   删除
实现通过字符串的形式,对对象里面的各种属性进行任意的操作!!
'''
class Person:
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def walk(self):
        print('%s赶紧走!!'%self.name)

def show(self):
    print('%s在展示自己的风采!!'%self.name)
def show1(self):
    print('%s在展示自己的风采!!'%self.name)
p1=Person('小李',11)
#字符串获取对象中的实例属性
a=getattr(p1,'name')
print(a)

#字符串判断对象中是否存在其方法或者实例属性
if hasattr(p1,'age'):
    print('对象p1中存在age')
if hasattr(p1,'run'):
    print('p1对象中存在实例属性run')
if hasattr(p1,'walk'):
    p1.walk()
if hasattr(p1,'run'):
    p1.run()

#赋值,多加属性,或者方法
setattr(p1,'sex','man')
print(p1.sex)

setattr(Person,'show',show)
p1.show()

setattr(p1,'show1',show1)
p1.show1(p1)

#删除属性,或者方法
#delattr(p1,'show')
delattr(p1,'age')
p1.age





 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天的学习日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值