面向对象核心编程之反射现象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





猜你喜欢

转载自blog.csdn.net/qq_46044325/article/details/127058755