zoukankan      html  css  js  c++  java
  • 反射

    反射:通过字符串映射到对象的属性

    # 反射:通过字符串映射到对象的属性
    # hasattr()  判断有没有属性
    # getattr()  取到对象属性
    # setattr()  修改(新增)
    # delattr()   删除
    
    class People:
        country = "China"
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def talk(self):
            print("%s is talking"%self.name)
    
    obj = People("alex",18)
    # print(obj.name)    # obj.__dict__["name"]
    # print(obj.talk)
    
    # print(hasattr(obj,"name")) # 判断obj下有没有.name属性,本质上obj.__dict__["name"]
    # print(hasattr(obj,"talk")) # 判断obj.talk存在与否
    #
    # print(getattr(obj,"name",None))   # 第三个参数为default,设置为None 没有obj.name,打印为None,不设置会报错
    # print(getattr(obj,"talk",None))
    #
    # setattr(obj,"sex","男")   # 本质是obj.sex = "男"
    # print(obj.sex)
    #
    # delattr(obj,"age")   #本质del obj.age
    # print(obj.__dict__)
    
    print(getattr(People,"country"))    #People.country
    

    反射实例: 接收用户输入,触发对应效果

    class Service:
        def run(self):
            while True:
                inp = input(">>:").strip()   # inp = "get a.txt"
                cmds = inp.split()   # cmds = ["get","a.text"]
                if hasattr(self,cmds[0]):
                    func = getattr(self,cmds[0])
                    func(cmds)
    
        def get(self,cmds):
            print("get........",cmds)
    
        def put(self):
            print("put........")
    
    obj = Service()
    obj.run()
    

      

  • 相关阅读:
    常见面试题
    3*0.1 == 0.3 将会返回什么?true 还是 false?
    poj_2186 强连通分支
    强连通分量、割点、桥
    最小生成树
    poj_2349 Kruskal 最小生成树
    poj_1258 prim最小生成树
    最短路径
    poj_1125 Floyd最短路
    poj_1860 SPFA
  • 原文地址:https://www.cnblogs.com/fantsaymwq/p/9919413.html
Copyright © 2011-2022 走看看