2024年12月24日 建站教程
反射是一种在程序运行时检测和修改自身结构的能力。在Python中,我们可以通过几种方式实现反射,下面web建站小编给大家简单介绍一下具体示例代码!
1. 利用type()和isinstance()
type()可以获取对象的类型。isinstance()可以判断对象的类型。
示例用法如下:
class Foo: pass f = Foo() type(f) # <class '__main__.Foo'> isinstance(f, Foo) # True
2. 利用getattr().setattr()和delattr()
getattr()可以读取对象的属性值。setattr()可以设置对象的属性值。delattr()可以删除对象的属性。
示例用法如下:
class Foo: bar = 1 f = Foo() getattr(f, 'bar') # 1 setattr(f, 'bar', 2) getattr(f, 'bar') # 2 delattr(f, 'bar') getattr(f, 'bar') # AttributeError
3. 利用inspect模块
inspect模块可以获取Python对象的许多信息。我们可以使用它实现反射。
示例用法如下:
import inspect class Foo: def func(self): pass f = Foo() inspect.isclass(Foo) # True, 判断Foo是一个类 inspect.ismethod(f.func) # True, 判断f.func是一个方法 inspect.getmembers(f) # [('func', <bound method Foo.func of <__main__.Foo object at 0x10d173050>>)], 获取f的所有成员
4. 利用eval().exec()和compile()
eval()可以运行字符串表达式。exec()可以运行字符串语句。compile()可以编译字符串为代码。
示例用法如下:
code = 'print(1 + 2)' eval(code) # 3 exec(code) # 3 code = 'def func(): print(1 + 2)' c = compile(code, '', 'exec') exec(c) # 执行代码并定义func函数 func() # 3
本文链接:http://so.lmcjl.com/news/20060/