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