Python——反射
反射:
- 通过对象,来获取实例变量和绑定方法
- 通过类,来获取类变量、类方法、静态方法
- 通过模块名,来获取模块中的任意变量(普通变量,函数类)
- 通过本文件,来获取本文件中的任意变量。
注意:这里的对象是指任何形式的。(在Python中一切皆为对象)
getattr:根据字符串的形式去获取、运行对象的成员。
class School(object):
def grade(self):
print('grade')
def classes(self):
print('classes')
def name(self):
print('name')
obj1 = School()
getattr(obj1,'grade')() #相当于obj1.grade()
#高级
getattr(obj1,'grade','错误') #当如有没有类中方法时,就会返回错误。这个方式要比hasattr执行效率高。
配合modules来进行自有对象的使用。
a = print('111')
getattr(sys.modules[__name__],'a') #自己本模块的导入。
setattr:根据字符串的形式去更改对象的成员
class School(object):
def __init__(self):
self.age = 20
def grade(self):
print(self.age)
obj1 = School()
setattr(obj1,'age',80) #相当于obj1.age = 80
getattr(obj1,'grade')()
delattr:根据字符串的形式去删除对象的成员。
class School(object):
def __init__(self):
self.age = 20
def grade(self):
print(self.age)
obj1 = School()
delattr(obj1,'age') #相当于del obj1.age 不带返回删除值
hasattr:判断类中是否有该对象的成员
class School(object):
def __init__(self):
self.age = 20
def grade(self):
print(self.age)
obj1 = School()
v1 = hasattr(obj1,'age') #判断类中是否有该对象。
print(v1)

浙公网安备 33010602011771号