反射
一 、对象的反射
class A(object): def __init__(self,name): self.__name = name def get_name(self): return self.__name c = A('alex') thing = input('>>>') if hasattr(c,thing): print(getattr(c,thing)()
当我们接收到一个字符串的时候,如果你想要属性:
getattr(对象名,‘属性名’)
如果你想要方法的时候
getattr(对象名,'方法名')() # 没有括号就是方法的地址,加上()这个方法调用符,就变成一个方法
二 、类的反射
class B(object): __discount = 100 @classmethod def get_discount(cls): return cls.__discount
def heihei():
return ‘你好’
c = input('>>>') if hasattr(B,c): print(getattr(B,c)())
三种情况:
1.类调用类方法:getattr(类名,‘类方法名’)()
2.类调用静态方法: getattr(类名,'静态方法名')()
3类调用静态变量:getattr(类名,'属性')
三 、模块的反射
import time # __import__(time) c = getattr(time,'time')() print(c)
与什么组合起来好用?
跟枚举 enumerate(列表,startnum)组合起来来将输入的字符串用数字代替,优化了客户体验