【Python】Python内置函数dir详解
1.命令介绍
最近学习并使用了一个python的内置函数dir,首先help一下:
Help on built-in function dir in module __builtin__:
dir()
dir([object]) -> list of strings
Return an alphabetized list of names comprising (some of) the attributes
of the given object, and of attributes reachable from it:
No argument: the names in the current scope.
Module object: the module attributes.
Type or class object: its attributes, and recursively the attributes of
its bases.
Otherwise: its attributes, its class's attributes, and recursively the
attributes of its class's base classes.
通过help,可以简单的认为dir列出指定对象或类的属性。
2.实例
下面是一个简单的测试:
def a(self):
pass
class A1(A):
def a1(self):
pass
if __name__ == '__main__':
print("dir without arguments:", dir())
print("dir class A:", dir(A))
print("dir class A1:", dir(A1))
a = A1()
print("dir object a(A1):", dir(a))
print("dir function a.a:", dir(a.a))
测试结果:
dir class A: ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a']
dir class A1: ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'a1']
dir object a(A1): ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'a1']
dir function a.a: ['__call__', '__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__func__', '__ge__', '__get__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
3.使用dir查找module下的所有类
最初使用这个函数的初衷,就是在一个module中查找实现的类名,通过该函数可以很容易的实现。
比如把上面的测试程序保存为A.py,再建一个测试程序,内容如下:
if __name__ == '__main__':
print("dir module A:", dir(A))
结果如下:
可以看出class A和A1都能够找到。
4.如何找到当前模块下的类
这是一个烦恼较长时间的一个问题,也没有搜到详细的解决方法,下面是我的集中实现方法。
4.1.方法一:在module下面直接调用
比如在上面的A.py最下面添加一行,即可在后续的代码中可以使用selfDir来查找当前的module下的类,修改后的代码如下:
def a(self):
pass
class A1(A):
def a1(self):
pass
curModuleDir=dir() # get dir of current file(module)
if __name__ == '__main__':
print("dir without arguments:", dir())
print("dir class A:", dir(A))
print("dir class A1:", dir(A1))
a = A1()
print("dir object a(A1):", dir(a))
print("dir function a.a:", dir(a.a))
print("dir current file:", curModuleDir)
4.2.方法二:import当前module
把当前module和别的import一样引用,代码如下:
import A as this # import current module
class A:
def a(self):
pass
class A1(A):
def a1(self):
pass
if __name__ == '__main__':
print("dir without arguments:", dir())
print("dir class A:", dir(A))
print("dir class A1:", dir(A1))
a = A1()
print("dir object a(A1):", dir(a))
print("dir function a.a:", dir(a.a))
print("dir current file:", dir(this))
4.3.方法三:根据module名称查找module,然后调用dir
我们知道module下面有个属性__name__显示module名称,怎么能够根据module名称来查找module对象呢?可以借助sys.modules。代码如下:
class A:
def a(self):
pass
class A1(A):
def a1(self):
pass
if __name__ == '__main__':
print("dir without arguments:", dir())
print("dir class A:", dir(A))
print("dir class A1:", dir(A1))
a = A1()
print("dir object a(A1):", dir(a))
print("dir function a.a:", dir(a.a))
print("dir current file:", dir(sys.modules[__name__])) # 使用__name__获取当前module对象,然后使用对象获得dir
如对本文有所疑问,请点击进入脚本之家知识社区提问。
您可能感兴趣的文章:
【Python】Python内置函数dir详解的更多相关文章
- day14内置函数作业详解
day14题目 day14作业及默写 1,整理今天所学内容,整理知识点,整理博客. 2,画好流程图. 3,都完成的做一下作业(下面题都是用内置函数或者和匿名函数结合做出): 4,用map来处理字符串列 ...
- python基础-内置函数详解
一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highlight=built#ascii ...
- python基础——内置函数
python基础--内置函数 一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...
- 如何查看Python的内置函数
经常调用的时候不知道python当前版本的内置函数是哪些,可以用下面的指令查看: C:\Users\Administrator>python Python 2.7.11 (v2.7.11:6d1 ...
- Python的内置函数
python的内置函数一共有68个,下面将简单介绍各个函数的功能. abs() dict() help() min() setattr() all() dir() hex() next() slice ...
- Python入门-内置函数一
什么是内置函数?就是python给你提供的拿来直接用的函数,比如print,input等等,截止到python版本3.6.2 python一共提供了68个内置函数,他们就是python直接提供给我们的 ...
- python_way,day3 集合、函数、三元运算、lambda、python的内置函数、字符转换、文件处理
python_way,day3 一.集合 二.函数 三.三元运算 四.lambda 五.python的内置函数 六.字符转换 七.文件处理 一.集合: 1.集合的特性: 特性:无序,不重复的序列 如果 ...
- python print()内置函数
啦啦啦啦啦啦,我又来了,学习任何东西都得坚持,我一定的好好加油!!! 今天来说说print()函数,前边我们已经用过好好多次啦,现在来学习哈吧!!! Python的内置函数,print() print ...
- Python 集合内置函数大全(非常全!)
Python集合内置函数操作大全 集合(s).方法名 等价符号 方法说明 s.issubset(t) s <= t 子集测试(允许不严格意义上的子集):s 中所有的元素都是 t 的成员 s ...
随机推荐
- 你不知道的javaScript笔记(1)
规避冲突 function foo(){ function bar(a){ i = 3; console.log(a + i); } for ( var i=0; i < 10; i++){ b ...
- vue中的$on,$emit,$once,$off源码实现
这几种模式是基于订阅观察者模式的,维护一个事件中心,on的时候将事件按名称存在事件中心里,称之为订阅者,然后emit将对应的事件进行发布,去执行事件中心里的对应的监听器. 第一步就是创建一个构造构造, ...
- c/c++ 表白小程序
1.开发工具: vs vc(任选一个) 2.准备材料 : a.一首音乐 (注意:音乐要求重命名为 “x” ) b.20张图片(注意: 图片要求重命名为 “1” "2" ...
- SAP常见问题与解决办法(转)
1.A:在公司代码分配折旧表时报错? 在公司代码分配折旧表时报错,提示是“3000 的公司代码分录不完全-参见长文本” 希望各位大侠帮我看看.3000 的公司代码分录不完全-参见长文本 R: a.你把 ...
- tomcat6添加服务
Mysql在导入大量数据的时候就要把tomcat添加成服务 添加服务 在DOS界面下,进入Tomcat解压目录的bin目录 service.bat install
- TCD产品技术参考资料
1.Willis环 https://en.wikipedia.org/wiki/Circle_of_Willis 2.TCD仿真软件 http://www.transcranial.com/index ...
- Java——英文字母---18.10.11
package lianxi;import java.io.*;import java.util.Scanner;public class file{ public static void main ...
- Lucene如何实现多条件搜索?
有两种方式可以实现, 一是:Lucene搜索API中提供了一个布尔查询器(BooleanQuery),它可以包含多个查询器,每个查询器Occur枚举控制是“and” 还是“or” BooleanQue ...
- Git的升级版本
关于升级版本,例如我们要升级service版本,我们可以这样子操作 1.在master里面pull完了之后,到自己的分支,然后merge master里面的代码,然后把pom文件 里面的版本升一级,然 ...
- Spark Streaming实时处理应用
1 框架一览 事件处理的架构图如下所示. 2 优化总结 当我们第一次部署整个方案时,kafka和flume组件都执行得非常好,但是spark streaming应用需要花费4-8分钟来处理单个 ...