时间:2021-07-01 10:21:17 帮助过:121人阅读
什么是自省?
在日常生活中,自省(introspection)是一种自我检查行为。
在计算机编程中,自省是指这种能力:检查某些事物以确定它是什么、它知道什么以及它能做什么。自省向程序员提供了极大的灵活性和控制力。
说的更简单直白一点:自省就是面向对象的语言所写的程序在运行时,能够知道对象的类型。简单一句就是,运行时能够获知对象的类型。
例如python, buby, object-C, c++都有自省的能力,这里面的c++的自省的能力最弱,只能够知道是什么类型,而像python可以知道是什么类型,还有什么属性。
最好的理解自省就是通过例子: Type introspection 这里是各种编程语言中自省(introspection)的例子(这个链接里的例子很重要,也许你很难通过叙述理解什么是introspection,但是通过这些例子,一下子你就可以理解了)
回到Python,Python中比较常见的自省(introspection)机制(函数用法)有: dir(),type(), 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'>
isinstance()
可以使用 isinstance() 函数测试对象,以确定它是否是某个特定类型或定制类的实例:
- >>> isinstance("python", str)
- True
Python自省中help用法扩展:
打开python的IDLE,就进入到了python解释器中,python解释器本身是被认为是一个主模块,然后在解释器提示符>>>下输入一些我们想了解的信息,所以首先我们会先寻求帮助,所以输入help,接着输入help(),我们就进入了help utility,然后循着提示keywords,modules,以了解python的关键字以及python自带的或者我们额外安装和定义的模块,如果要退出,输入'q',然后回车。
如果我们想了解某个对象(python里面所有对象都可以认为是对象),也可以求助也help(),不过要在括号里输入对象的名称,格式help(object),例如help(print),鉴于对象的自省内容太多,有的只粘贴出部分内容。
- >>> help
- Type help() for interactive help, or help(object) for help about object.
- >>> help()
- Welcome to Python 3.6's help utility!
- If this is your first time using Python, you should definitely check out
- the tutorial on the Internet at https://docs.python.org/3.6/tutorial/.
- Enter the name of any module, keyword, or topic to get help on writing
- Python programs and using Python modules. To quit this help utility and
- return to the interpreter, just type "quit".
- ...
- help> keywords
- Here is a list of the Python keywords. Enter any keyword to get more help.
- False def if raise
- None del import return
- True elif in try
- and else is while
- as except lambda with
- assert finally nonlocal yield
- break for not
- class from or
- continue global pass
- help> modules
- Please wait a moment while I gather a list of all available modules...
- PIL base64 idlelib runpy
- __future__ bdb idna runscript
- __main__ binascii idna_ssl sched
- _ast binhex imaplib scrolledlist
- _asyncio bisect imghdr search
- _bisect browser imp
- ...
- Enter any module name to get more help. Or, type "modules spam" to search
- for modules whose name or summary contain the string "spam".
- >>> help('print')
- Help on built-in function print in module builtins:
- print(...)
- print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
- Prints the values to a stream, or to sys.stdout by default.
- Optional keyword arguments:
- file: a file-like object (stream); defaults to the current sys.stdout.
- sep: string inserted between values, default a space.
- end: string appended after the last value, default a newline.
- flush: whether to forcibly flush the stream.
推荐教程:《Python教程》《Python教程》
以上就是Python 的自省是什么?的详细内容,更多请关注gxlcms其它相关文章!