1.反射类的属性和方法 2.反射对象的属性和方法 3.反射模块中的属性和方法
反射方法
描述
hasattr(obj,name)
判断是否包含名称为name的属性,返回的是布尔值
getattr(obj,name)
获取名称为name的属性的具体数据
setattr(obj,name) 较少
给名称为name的属性设置value值
delattr(obj,name) 较少
删除名称为name的属性
getattr()
class Teacher():
dic = {"学生信息":"show_student","老师信息":"show_teacher"}
def init(self,name,age):
self.name = name
self.age = age
@classmethod
def func(cls):
print("--func--")
def show_student(self):
print("--show student--")
def show_teacher(self):
print("--show teacher")
反射类中的属性和方法
获取Teacher类中的dic
print(getattr(Teacher,"dic"))
获取Teacher类中的func
ret = getattr(Teacher,"func")
ret()
反射对象中的属性和方法
teacher = Teacher("陈老师",21)
获取name属性
print(getattr(teacher,"name")) #teacher.name
获取所有的属性
print(getattr(teacher,"dict"))
ret = getattr(teacher,"show_student")
print(ret)
ret()
反射模块中的属性和方法
import test1
反射模块中的属性
print(getattr(test1,"name"))
反射模块中 的方法
func1 = getattr(test1,"func1")
func1()
func2 = getattr(test1,"func2")
func2(666)
反射模块中的类
Person = getattr(test1,"Person")
per = Person()
per.study()
# hasattr() 检测对象是否有某个成员,返回布尔
class Teacher():
dic = {"学生信息":"show_student","老师信息":"show_teacher"}
def init(self,name,age):
self.name = name
self.age = age
@classmethod
def func(cls):
print("--func--")
def show_student(self):
print("--show student--")
def show_teacher(self):
print("--show teacher")
判断有没有dic
b = hasattr(Teacher,"dic")
if b:
ret = getattr(Teacher,"dic")
print(ret)
else:
print("没有此属性")
练习:根据用户输入的key来调用对应的方法
如:输入“学生信息”,调用 show_student
key = input("请输入学生信息或老师信息:") #学生信息
"--show student--"
#setattr 给对象或者类添加属性
class Person:
pass
给Person添加静态属性age
setattr(Person,"age",18)
print(Person.age)
delattr 删除对象或者类中的成员
per = Person()
setattr(per,"name","黄志")
print(per.name)
delattr(Person,"age")
print(Person.age)