python中的自省和反射机制
一、自省
在计算机编程中,自省是指这种能力:检查对象以确定它是什么类型,它有哪些属性和哪些方法。自省向程序提供了极大的灵活性和控制力。
1.type 返回对象的类型
2.dir 返回对象的属性方法名的列表
3.isinstance(obj, class) 判断obj是不是class类型
4.issubclass(class, (pclass1,pclass2,...)) 判断class是不是pclass1或者pclass2...中的子类
二、反射
反射就是动态的操作对象,就是根据字符串形式的属性名方法名操作对应的对象。
1.getatter(obj,name) 获取obj里面的属性名为name的属性
2.hasattr(object, name) 判断对象是否具有某个属性或方法
3.setattr(object, name, value) 设置对象的属性或方法,如果属性不存在,则新建它
4.delattr(object, name) 删除对象的属性或方法
示例代码:
class Person:
name = '张三'
age = 25
def hello(self):
print('Hello, I am ' + Person.name + ', I am ' + str(Person.age) + ' years old.')
# 演示使用反射获取对象属性和方法
p = Person()
# 判断对象是否有name属性
print(hasattr(p, 'name')) # 返回False
# 获取对象的age属性,如果属性不存在,则返回默认值-1
age = getattr(p, 'age', -1)
print(age) # 输出25
# 设置对象的gender属性为'Male'
setattr(p, 'gender', 'Male')
print(p.gender) # 输出Male
# 删除对象的gender属性
delattr(p, 'gender')
# 调用对象的hello()方法
getattr(p, 'hello')() # 输出:Hello, I am 张三, I am 25 years old.
示例代码2:
class Operation:
def add(self, x, y):
return x + y
def sub(self, x, y):
return x - y
def mul(self, x, y):
return x * y
def div(self, x, y):
return x / y
# 通过反射调用对象方法
opr = Operation()
opr_method = getattr(opr, 'add')
print(opr_method(3, 5)) # 输出8
浙公网安备 33010602011771号