python对象自省(introspection)

python对象自省(introspection)

 

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

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

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

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

函数

描述

dir()

返回一个列表,存储该对象下能被 . 出的所有属性与方法。

hasattr()

查看对象是否具有某种属性或方法,返回True或者False。

getattr()

获取对象下的某一属性或方法。如被获取对象没有相应的属性或方法,则可以为其设置默认值。

setattr()

设置对象下的某一属性的值,通常我们不会在对象外部为其新增某一方法,而是在在对象的类中进行设置。

delattr()

删除对象中的某一属性或方法。

help()

获取对象的帮助信息。注意,没有返回值!内部会调用print()进行打印操作。

issubclass()

判断一个类是不是另一个类的子类

isinstance()

判断一个对象是否是一个已知的类型

id()

返回存储对象的内存地址编号

callable()

判断对象是否可调用

内置函数(Built-in Functions)https://docs.python.org/zh-cn/3/library/functions.html

 

dir是用自省的最重要的函数之一。它返回一个列表,列出了一个对象所拥有的属性和方法。例如:

当你记不清一个对象所拥有的属性和方法,这会非常有帮助。

如果我们运行dir()而不传入参数,那么它会返回当前作用域的所有名字。

 

type函数返回一个对象的类型。例如:

 

inspect模块也提供了一些自省功能

inspect模块主要提供了四种用处:

  1.对是否是模块、框架、函数进行类型检查

  2.获取源码

  3.获取类或者函数的参数信息

  4.解析堆栈

要使用inspect 需要先 import  inspect

关于inspect模块 参见 https://www.cnblogs.com/yaohong/p/8874154.html

示例、python的inspect模块的inspect.getmembers(),能够比dir()获取到更详尽的自省信息

import inspect
#示例对象--自定义函数
def foo(a: int, b: int):
    return a + b
print(inspect.getmembers(foo))  #请将inspect.getmembers(foo)换为dir(foo)对比之

你可运行之看看。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值