• 反射


    用户输入一段字符串,执行该字符串对应的方法

    hasattr():判断一个属性是否在对象中,返回True或者False

    getattr():通过字符串获取属性或者方法,如果获取收到了,就会返回相应的属性和方法

    setattr():通过字符串来设置属性或方法

    delattr():通过字符串来删除属性或方法

    class Foo:
      def run(self):
    			print('run')
      def speak(self):
        	print('speak')
     p = Foo()
    print(Foo.__dict__)
    cmd = input('请输入命令')
    方案一
    print(Foo.__dict__[cmd])
    Foo.__dict__[cmd](p)
    if hasattr(p,cmd):
      run = getattr(p,cmd)
      run()
     else:
      print('该命令不存在')
      
      通过用户输入key和value往对象中赋值
      key = input('请输入key:')
      value = input('请输入value')
      setattr(p,key,value)
      print(p.age)
      
      动态的往对象中放方法
      def test(a):
        print(a)
       print(p.__dict__)
      setattr(p,'test',test)
      print(p.__dict__)
      p.test(0)
      动态的删除属性
      
      原始的删除方法
      p.name = 'lqz'
      print(p.__dict__)
     del p.name
    print(p.__dict__)
    
    动态删除p中属性为变量a的属性
    p.name = 'lqz'
    p.age = 18
    p.sex = 'male'
    a = input('请输入要删除的属性:')
    print(p.__dict__)
    delattr(p,a)
    print(p.__dict__)
    直接p.a是不对的
    del p.a
    删除对象中属性为name 字符串的属性
    
    判断一下对象中有没有我输入的属性,如果有打印
    p.name = 'lqz'
    p.age = 19
    p.sex = 'male'
    cmd = input('请输入要查询的属性:')
    if hasattr(p,cmd)
    	a = getattr(p,cmd)
    else:
      print('该属性不存在')
      
    
      
    

    反射:通过字符串来获取,设置,删除对象中的属性或方法

    例子

    class BlackMedium:
      featrue = 'Ugly'
      def __init__(self,name,addr):
        self.name = name 
        self.addr = addr
      def sell_house(self):
        print('%s 黑中介卖房子啦,傻逼才买呢,但是谁能证明自己不傻逼' %self.name)
         def rent_house(self):
            print('%s 黑中介租房子啦,傻逼才租呢' %self.name)
            
    b1=BlackMedium('万成置地','回龙观天露园')
    
    print(b1__dict__)
    print(hasattr(b1,'sell_house'))
    a = 'sell_house'
    getattr(b1,'sell_house')
    getattr(b1,a)()
    sell_house = getattr(b1,a)
    name = getattr(b1,'name')
    print(name)
    print(sell_house)
    
    删除属性或方法
    delattr(b1,'xxx')
    print(b1.__dict__)
    delattr(b1,'name')
    print(b1.__dict__)
    
    模块也是对象,也可以用四个方法
    import os
    print(hasattr(os.'path1'))
    
    使用自己写的模块,通过反射来获取模块中是否有我要使用的属性或方法,如果有就执行,没有就报错
    
    import utils
    
    utils.speak()
    if hasattr(utils,'speak'):
      speak = getattr(utils,'speak')
      speak()
      
      还有就是我以为模块中写完了其实没写完,去判断是否存在
      utils.eat()
      if hasattr(utils,'eat'):
        eat = getattr(utils,'eat')
        eat()
        
      else:
        print('那个人没写完')
      
    
  • 相关阅读:
    工资是用来支付给责任的,责任越大,工资越高。 涨工资,是因为承担了更大的责任。
    水平分库分表的关键问题及解决思路
    APP多版本共存,服务端如何兼容?
    ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)
    Java 并发专题 :闭锁 CountDownLatch 之一家人一起吃个饭
    Java进阶 创建和销毁对象
    Java OCR tesseract 图像智能字符识别技术
    网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处
    从原理角度解析Android (Java) http 文件上传
    android pop3与imap方式接收邮件(javamail)
  • 原文地址:https://www.cnblogs.com/luodaoqi/p/11528886.html
Copyright © 2020-2023  润新知