本章我们讨论Python 自省,自省是一种自我检查的行为。 在计算机编程中,自省是在运行时确定对象的类型或属性的能力。 Python 编程语言对自省有很大的支持,Python 中的所有内容都是一个对象。 Python 中的每个对象都可以具有属性和方法,通过使用内省,我们可以动态检查 Python 对象。
Python dir
函数
dir()
函数返回属于对象的属性和方法的排序列表。
在这里,我们看到了元组对象的dir()
函数的输出。
我们的研究表明,元组对象有一个__doc__
属性。
direx.py
该示例使用dir()
函数检查了几个对象:用户定义的对象,本机数据类型,函数,字符串或数字。
不带任何参数的dir()
返回当前作用域中的名称。
我们在包含一些模块之前和之后执行dir()
函数。
Python type()
函数
type()
函数返回对象的类型。
typefun.py
该示例将各种类型的对象打印到控制台屏幕。
id()
函数
id()
返回对象的特殊 ID。
idfun.py
该代码示例打印内置和自定义的各种对象的 ID。
Python sys
模块
sys
模块提供对解释器使用或维护的系统特定变量和功能以及与解释器强烈交互的功能的访问。 该模块允许我们查询有关 Python 环境的信息。
在上面的代码中,我们检查了 Python 版本,平台和搜索路径位置。
我们还可以使用dir()
函数来获取sys
模块的变量和函数的完整列表。
该示例显示了sys
模块的executable
,argv
和byteorder
属性。
可执行文件是一个字符串,给出有意义的系统上 Python 解释器的可执行二进制文件的名称。
这给出了传递给 Python 脚本的命令行参数列表。
字节顺序是本机字节顺序的指示。 在 big-endian(最高有效字节在前)平台上,值将为“ big”,在 little-endian(最低有效字节在前)平台值将为“小”。
其他自省
接下来,我们展示检查 Python 对象的各种其他方式。
attrs.py
hasattr()
函数检查对象是否具有属性。 getattr()
函数返回属性的内容(如果有的话)。
isinstance
函数检查对象是否为特定类的实例。
我们可以交互地描述一个函数。
instance.py
众所周知,一切都是 Python 中的对象; 偶数和字符串。 object
是 Python 中所有对象的基本类型。
issubclass()
函数检查特定的类是否是另一个类的派生类。
subclass.py
在我们的代码示例中,Wall
类是Object
类的子类。 Object
和Wall
本身也是它们的子类。 Object
类不是Wall
类的子类。
__doc__
属性提供了有关对象的一些文档,__name__
属性包含对象的名称。
namedoc.py
在我们的示例中,我们创建了三个函数的列表:一个自定义函数和两个本机函数。 我们浏览列表并打印__name__
和__doc__
属性。
最后,还有一个callable()
功能。 该函数检查对象是否为可调用对象(函数)。
callable.py
在代码示例中,我们检查三个对象是否可调用。
fun()
函数和setName()
方法是可调用的。 (方法是绑定到对象的函数。)