Python dir() 语法
dir() 是 Python 的一个内置函数,它会返回一个列表,该列表包含某个对象的所有属性和方法。
语法:
dir(object)说明:
参数 object 是可选的,它可以是任意对象(包括模块、函数、类、实例等)。对于 dir() 函数的使用,我们需要分为以下几种情况。
- 参数 object 省略,dir() 会返回当前作用域内所有变量的列表。
- 参数 object 是一个模块,则 dir() 会返回该模块所有方法(或函数)的列表。
- 参数 object 是一个类或实例,dir() 会返回该类所有属性和方法的列表(包括继承成员)。
提示:
- dir() 主要用于开发环境中的交互式调试,而不是在生产环境中使用。
- dir() 返回的列表中,会包含 “普通属性” 以及 “特殊方法” (即 “魔法方法” )。
Python dir() 摘要
| 使用频率 | 低 |
|---|---|
| 官方文档 | 查看 |
| 相关函数 | help() |
Python dir() 示例
接下来,我们通过几个简单的例子来讲解一下 Python dir() 函数是如何使用的。
示例 1:dir() 不带参数
print(dir())运行结果如下。
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']示例 2:dir() 的参数是一个模块
import math
print(dir(math))运行结果如下。
['__doc__', '__file__','__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fma', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'sumprod', 'tan', 'tanh', 'tau', 'trunc', 'ulp']分析:
dir(math) 会返回 math 模块所有的函数。从这个例子也可以看出,如果想要查看某个模块都有哪些方法或函数,我们可以使用 dir() 函数来实现。
示例 3:dir() 的参数是一个类
class Hero():
name = '船长'
type = '力量型'
def skill(self):
print('放大招啦!')
print(dir(Hero))运行结果如下。
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'skill', 'type']分析:
前面一堆以 “__”(双下划线)开头、并且以 “__” 结尾的都是内置的魔法方法。最后部分的 name、skill、type 则是我们在 Hero 类中自定义的属性和方法。
示例 4:dir() 的参数是一个实例
class Hero():
name = '船长'
type = '力量型'
def skill(self):
print('放大招啦!')
h = Hero()
print(dir(h))运行结果如下。
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'skill', 'type']分析:
当 dir() 参数是一个对象时,本质上获取的也是该对象所对应类的所有属性和方法。
