我是靠谱客的博主 大力大白,这篇文章主要介绍python的自省机制,现在分享给大家,希望可以做个参考。

文章同步更新于:blog.dalao.icu/archives/34.html,请访问该博客获得更好的阅读体验。


1.什么是自省机制

在编程语言中,自省(introspection)并不是自我反省,而是指自我检查行为。

它的内容包括:

  1. 告诉别人,我是谁
  2. 告诉别人,我能做什么

检查某些事物以确定它是什么,它能做什么,这样,给开发人员带来了极大的灵活性和控制力。

具体的来说,就是OPP(面向对象)语言在程序运行时,能够知道对象的类型,部分语言还能够知道对象所拥有的属性。

自省机制,对很多动态语言(如python)是很重要的机制。

如,python,ruby,object-C, C++等语言都具有自省能力,在这些语言中,C++自省能力最差,只能在运行时得知对象的类型,而python,具有很强的自省能力,不仅能知道运行时对象的类型,还能知道对象所拥有的属性。


2.python中常见的自省机制

在python中,常见的自省(introspection)机制有许多,如:dir()type()hasattr()isinstance()等,通过这些函数,我们可以在运行时得知对象的类型和属性。

dir()

dir()函数是python中自省功能特别常用的一种函数,它返回传递给它的任何对象的属性名称经过排序的列表,如果不指定对象,则dir()函数返回当前作用域中的名称。

复制代码
1
2
3
4
a = 2333 print(dir(a)) # 输出省略...

type():

type()函数可以帮忙确定对象的类型,比如确定一个对象是字符串还是整数类型,或者是其他对象的类型,它返回类型对象的名称:

复制代码
1
2
3
4
5
print(tpye(42)) # output:<class 'int'> print(type([1, 2])) # output:<class 'list'>

hasattr()

虽然使用dir()函数会返回一个对象属性的列表,但我们有时候的需求只是判断一个对象是否含有某一个或者多个属性,这样,我们就可以使用hasattr()函数来完成,它返回一个bool值:

复制代码
1
2
3
import json print(hasattr(json, "dumps"))

getattr()

使用hasattr()函数判断对象是否有某个属性值后,我们可以配合getattr()函数来获取其属性值:

复制代码
1
2
print(getattr(json, "__path__"))

使用getattr()获取函数后,我们可以很方便的使用这个函数,比如以下的例子,这样我们就可以不用再使用json.dumps来调用这个函数:

复制代码
1
2
3
4
5
6
dumps = getattr(json, "dumps") dumps({"name": "dio"}) # 或者以下写法 dumps = josn.dumps dumps({"name": "dio"})

id():

id()函数返回对象的唯一标识符(也就是对象的地址),标识符是一个整数:

复制代码
1
2
3
a = 23333 print(id(a))

isinstance():

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

复制代码
1
2
3
4
5
6
7
8
class A: pass class B(A): pass obj = B() print(isinstance(obj, B)) # true print(isinstance(obj, A)) # true

只要某对象与继承链上的类型进行比较,均会返回True

callable():

使用callable()函数可以确定一个对象是否是可调用对象,比如函数对象,类对象等等,他们都是可调用的对象:

复制代码
1
2
3
callable("23333") # false callable(str) # true

最后

以上就是大力大白最近收集整理的关于python的自省机制的全部内容,更多相关python内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(377)

评论列表共有 0 条评论

立即
投稿
返回
顶部