反射是一个很重要的概念,它可以把字符串映射到实例的变量或者实例的方法然后可以去执行调用、修改等操作。它有四个重要的方法:
1、getattr 获取指定字符串名称的对象属性
2、setattr 为对象设置一个对象
3、hasattr 判断对象是否有对应的对象(字符串)
4、delattr 删除指定属性
1 # -*- coding:utf-8 -*- 2 def talk(self): # 定义一个函数 3 print("%s is talking..." % self.name) 4 class Dog(object): # 定义一个类 5 def __init__(self,name): 6 self.name = name 7 8 def eat(self): #定义一个eat的函数 9 print("%s is eating..." % self.name) 10 11 d = Dog("ssddda") # 实例化 12 choice = input("请随意输入>>>:") # 用户输入 13 print(hasattr(d, choice)) #判断一个对象obj里是否有对应的name_str字符串的方法 14 print(getattr(d,choice)) #根据字符串去获取obj对象里的对应的方法的内存地址 15 func = getattr(d,choice) 16 func() 17 if hasattr(d,choice): 18 '''choice为函数时''' 19 func = getattr(d,choice) 20 '''choice为变量时''' 21 # attr = getattr(d,choice) 22 # print(attr) 23 '''删除属性或方法''' 24 delattr(d,choice) 25 x = getattr(d,choice) 26 print(d) 27 else: 28 setattr(d,choice,talk) # setattr(x,'y',z) 等价于 设置 x.y = z 29 func = getattr(d,choice) 30 func(d) 31 # setattr(d,choice,20) 32 # attr = getattr(d,choice) 33 # print(attr)