Python的自省机制

Posted 青山牧云人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python的自省机制相关的知识,希望对你有一定的参考价值。

什么是自省?

在日常生活中,自省(introspection)是一种自我检查行为。

计算机编程中,自省是指这种能力:检查某些事物以确定它是什么、它知道什么以及它能做什么。自省向程序员提供了极大的灵活性和控制力

说的更简单直白一点:自省就是面向对象的语言所写的程序在运行时,能够知道对象的类型。简单一句就是,运行时能够获知对象的类型

例如python, buby, object-C, c++都有自省的能力,这里面的c++的自省的能力最弱,只能够知道是什么类型,而像python可以知道是什么类型,还有什么属性。

 

最好的理解自省就是通过例子: Type introspection  这里是各种编程语言中自省(introspection)的例子(这个链接里的例子很重要,也许你很难通过叙述理解什么是introspection,但是通过这些例子,一下子你就可以理解了

 

回到Python,Python中比较常见的自省(introspection)机制(函数用法)有: dir(),typr(), hasattr(), isinstance(),通过这些函数,我们能够在程序运行时得知对象的类型,判断对象是否存在某个属性,访问对象的属性。

 

 dir()

 dir() 函数可能是 Python 自省机制中最著名的部分了。它返回传递给它的任何对象的属性名称经过排序的列表。如果不指定对象,则 dir() 返回当前作用域中的名称。让我们将 dir() 函数应用于 keyword 模块,并观察它揭示了什么:

>>> import keyword
>>> dir(keyword)
[__all__, __builtins__, __doc__, __file__, __name__, __package__, iskeyword, kwlist, main]


 type()
 type() 函数有助于我们确定对象是字符串还是整数,或是其它类型的对象。它通过返回类型对象来做到这一点,可以将这个类型对象与 types 模块中定义的类型相比较:

>>> type(42)
<class int>
>>> type([])
<class list>


  hasattr()

 对象拥有属性,并且 dir() 函数会返回这些属性的列表。但是,有时我们只想测试一个或多个属性是否存在。如果对象具有我们正在考虑的属性,那么通常希望只检索该属性。这个任务可以由 hasattr() 和 getattr() 函数来完成.

>>> hasattr(id, __doc__)
True

 
 isinstance() 
 可以使用 isinstance() 函数测试对象,以确定它是否是某个特定类型或定制类的实例:

>>> isinstance("python", str)
True






以上是关于Python的自省机制的主要内容,如果未能解决你的问题,请参考以下文章

Python的自省机制

Python反射(自省)机制

python数据类型

python数据类型

Python自省与反射

python中的反射和自省