反射

一 、对象的反射

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)组合起来来将输入的字符串用数字代替,优化了客户体验

 

posted @ 2019-04-01 14:35  帅气的小神气  阅读(117)  评论(0编辑  收藏  举报