hasattr,getattr,setattr和delattr

'''
反射
'''
def add(self):
    print("我是新绑定的方法!")

class People(object):
    skin = "yellow"
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say(self, content):
        print("说了[%s]" % content)


choice = input(">>").strip()

# if choice in People.__dict__:
#     print("有此方法")
# print(People.__dict__)   #打印所有类属性和方法

# p = People("小白", "26")
# print(p.__dict__)          #打印所有的实例属性
p = People("小白", "26")

if hasattr(p, choice):
    #如果是方法,直接执行
    try:
        func = getattr(p, choice)
        func("打工不可能打工的!")  
    #输入是属性,则会报TypeError,则直接打印得到属性值
    except TypeError as e:
        print(func)
else:
    setattr(p, choice, add)
    func = getattr(p, choice)
    func(p)
#delattr(p, choice)     #删除属性和方法

  

posted @ 2018-04-27 21:09  与君同悦  阅读(105)  评论(0编辑  收藏  举报