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
posted @ 2021-03-17 22:14  軍子  阅读(107)  评论(0)    收藏  举报