反射:通过字符串映射到对象的属性
# 反射:通过字符串映射到对象的属性 # 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()