zoukankan      html  css  js  c++  java
  • 面向对象之反射

    标签(空格分隔): 反射


    本章主要共同学习一下面向对象的反射

    说到反射,先不说反射的定义,我们先来考虑一个问题:
    如果我之前定义过一个类的话,有类实例化对象,我们可以通过类来访问对象的属性;

    这里我们先定义一个类:

    class People:
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def talk(self):
            print('%s is talking' %self.name)
    obj=People('engon',18)
    print(obj.talk)#这里是属性
    print(obj.name) #obj.__dict__{'name'}
    

    上述例子说明:我们之前访问属性,方法,是通过对象.来的

    • 若果我们的程序有和用户互动的,需要用户输入想要访问的属性:
      看下边的代码对吗?
    class People:
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def talk(self):
            print('%s is talking' %self.name)
    obj=People('engon',18)
    
    choice=input('>>:')
    print(obj.choice)
    

    上面的代码执行结果肯定不行,因为obj.,.的后边一定是一个属性的名字,而不是一个字符串;

    • 现在的关键点是我们要通过用户通过字符串能够映射到属性:
      问题:怎么通过字符串来映射一个对象属性:(这里需要我们学会几种内置的方法)
      1.hasattr()
    class People:
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def talk(self):
            print('%s is talking' %self.name)
    obj=People('engon',18)
    print(hasattr(obj,'name'))#obj.name #obj.__dict__{'name'}
    print(hasattr(obj,talk))
    print(getattr(obj,'nameXXX',None))#获取
    print(getattr(obj,'talk',None))
    setattr(boj,'sex','male') #obj.sex='male'#设置模块
    print(obj.sex)
    delattr(obj,'age')#删除
    print(obj.__dict__)
    
    

    反射的应用:

    image.png-43.9kB

    通过下边的代码我们可以通过接收用户的输入来,调用属性;
    image.png-41.3kB

    image.png-62.2kB

    这样就可以映射了;

  • 相关阅读:
    【SCP-GO-100】梦 中 染
    【scp系列】SCP-4711 不便利便利店
    【scp系列】SCP-2298 塑料盒里的生活
    【scp系列】SCP-CN-1219 关云长大战外星人
    【scp系列】SCP-4444 以米斯达之名
    使用Ubuntu搭建Owncloud私有云
    python中函数的使用初步
    IOS自动化环境搭建踩坑指南
    接口测试工具apifox
    windowns上搭建vscode+node.js开发环境
  • 原文地址:https://www.cnblogs.com/surewing/p/9763945.html
Copyright © 2011-2022 走看看