面向对象进阶
反射
反射:通过字符串的形式操作对象相关的属性
getattr() 使用字符串数据类型的变量名获取属性值
hasattr() 使用字符串数据类型的变量名判断属性是否存在
setattr() 使用字符串数据类型的变量名获修改属性值
delattr() 使用字符串数据类型的变量名获删除属性值
class Management:
role = '管理员'
def __init__(self,name,sex,phone,mail):
self.name = name
self.sex = sex
self.phone = phone
self.mail = mail
def create_class(self):
print('创建了一个班级')
def create_teacher(self):
print('新建了一条讲师信息')
def create_student(self):
print('新建了一条学生信息')
manager = Management('小雨','女',1233211234567,'xiaoyu@qq.com')
# func = input('func:')
# f = getattr(manager,func)
# f()
f = getattr(manager,'phone') # 使用字符串数据类型的变量名获取属性值
print(f)
f = getattr(manager,'phone1','没有这个属性') # 可以添加找不到的时候的默认值,不然会报错
print(f)
cs = getattr(manager,'create_class') # 使用字符串数据类型的方法名调用方法
cs()
print(hasattr(manager,'name')) # True
f = getattr(Management,'role')
print(f)
import logging
if hasattr(manager,'sex'):
sex = getattr(manager,'sex')
print(sex)
else:
logging.warning('没有您输入的属性')
# Management.Country = 'China'
setattr(Management,'Country','China')
print(Management.Country) # China
delattr(Management,'Country')
setattr(manager,'job','teacher')
print(manager.job)
delattr(manager,'job')
# 可以通过delattr删除一个类中的方法
delattr(Management,'create_class')
def create_course(self):
print('创建了一个课程')
setattr(manager,'create_course',create_course)
manager.create_course(manager)
对象的反射
类的反射
模块的反射
本模块的反射:找到本模块sys.modules[__name__]
aaa = 'bbb' import sys print(sys.modules['__main__']) print(getattr(sys.modules['__main__'],'aaa')) # bbb print(sys.modules[__name__]) print(getattr(sys.modules[__name__],'aaa'))
