Python中dir()函数是一个非常常用的函数,它的主要作用是返回一个列表,其中包含了一个模块、类或实例所包含的所有属性和方法。在Python中,属性和方法都被视为对象的变量和函数,可以被直接调用或设置。
一、基本用法
dir()函数可以无参数调用,此时它会返回当前作用域内的所有变量、函数、类等信息,并且根据字母顺序进行排序:
# 基本用法示例
def test_func():
pass
test_var = 1
print(dir())
输出结果如下所示,其中__builtins__代表Python的内建模块,而其他的变量、函数则是当前作用域内的:
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'test_func', 'test_var']
除了无参数调用外,dir()函数还可以接受一个参数,此时它会返回该参数所代表的对象的所有属性和方法:
# 带参用法示例
import math
print(dir(math))
输出结果如下所示,其中包含了math模块的所有属性和方法:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
二、特殊方法和属性
在Python中,一些特殊的方法和属性以特殊字符(如下划线)开头和结尾,例如__init__方法、__str__方法等。这些方法和属性是Python提供的对类和对象进行特殊处理的机制,因此在使用dir()函数时,如果希望查看某个对象的特殊方法和属性,需要使用特殊方法__dir__():
# 特殊方法和属性示例
class MyClass:
def __init__(self):
self.x = 1
def __str__(self):
return str(self.x)
obj = MyClass()
print(dir(obj)) # 查看对象的所有方法和属性
print(obj.__dir__()) # 查看对象的特殊方法和属性
输出结果如下所示,其中包含了特殊方法和属性:
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'x']
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'x']
三、自定义列表属性和方法
除了可以直接使用Python提供的方法和属性外,在程序中也可以自定义类的属性和方法。对于自定义属性和方法,同样可以使用dir函数查看:
# 自定义列表属性和方法示例
class MyList(list):
def get_first(self):
return self[0]
my_list = MyList([1, 2, 3])
print(dir(my_list))
输出结果如下所示,其中包含了自定义的属性和方法:
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'get_first', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
四、总结
在Python中,dir()函数是一个非常常用的函数,它可以帮助我们了解一个模块、类或实例所具有的所有属性和方法,方便代码编写和调试。我们可以通过无参数调用或接受一个参数的方式来使用dir()函数,还可以使用特殊方法__dir__()来查看对象的特殊方法和属性。此外,我们也可以在自定义类中添加属性和方法,同样可以使用dir()函数来查看自定义类的属性和方法。