反射

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

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

  

原文地址:https://www.cnblogs.com/fantsaymwq/p/9919413.html