反射

处理字符串类型的属性名

class Management:
    role = '管理员'
    def __init__(self,name,sex,phone,mail):
        self.name = name
        self.sex = sex
        self.phone = phone
        self.mail = mail

    def creat_class(self):
        print('创建了一个班级')

    def creat_teacher(self):
        print('新建了一条讲师信息')

    def creat_student(self):
        print('新建了一条学生信息')

print(Management.role)
aa = input("要输入")
if hasattr(Management,aa):
    print(getattr(Management,aa))
# 输入role  打印 管理员

getattr是拿到名字,hasattr是判断名字在不在,第一个参数是类或对象名,第二个参数是字符串类型的属性名

创建一个实例

manager = Management('小雨','',1233211234567,'xiaoyu@qq.com')
#getattr相当于返回属性名
sex = getattr(manager,'sex') #  相当于manager.sex
print(sex)
#
cs = getattr(manager,'creat_class') #  相当于manager.creat_class
cs()
#创建了一个班级

setattr 是常用语添加一个静态属性 , delattr 删除一个属性

manager = Management('小雨','',1233211234567,'xiaoyu@qq.com')
setattr(manager,'hobby','点名') # == manager.hobby = '点名'
print(manager.hobby)
# 点名   传递三个参数第二个参数是字符串类型的属性名,第三个参数是属性对应的值
# 可以传递一个函数名,不过调用时还要把对象名写进去,这样添加的方法不会帮你自动传递
#对象, 如果不传就会报错,提示你少一个参数
def create_course(self):
    print('创建了一个课程')
setattr(manager,'create_course',create_course)
manager.create_course(manager)
#  创建了一个课程


#delattr删除属性
delattr(Management,'creat_class')
manager.creat_class()
# 报错,没有这个属性

 

posted @ 2017-11-25 17:44  瓜田月夜  阅读(61)  评论(0)    收藏  举报