Python中的dir()函数是Python自带的函数,可以快速获取对象的所有属性和方法。使用dir()函数有助于了解一个对象所包含的内容,是Python中常用的一个函数。
一、dir()函数介绍
dir()函数用于列出一个对象的所有属性和方法,返回的是一个列表。该函数可以用于任何对象,包括模块、类、实例等。
>>> dir(list)
['__add__', '__class__', '__class_getitem__', '__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', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
在上面的代码中,我们使用dir()函数列出了列表对象的所有属性和方法,并打印出来。
需要注意的是,dir()函数返回的列表中包括一些Python内置的属性和方法,以双下划线开头和结尾的是Python内置属性,例如“__init__”就是Python内置的构造函数。
二、dir()函数的应用
1. 使用dir()函数了解对象
使用dir()函数可以很方便地了解一个对象,包括对象所包含的属性和方法。例如,我们可以使用dir()函数来了解列表对象的一些方法:
mylist = [1,2,3]
print(dir(mylist))
上面代码会输出一个包含列表对象所有方法和属性的列表:
['__add__', '__class__', '__class_getitem__', '__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', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
使用dir()函数,我们可以快速了解列表对象中的所有属性和方法。
2. 动态调用对象方法
除了了解对象的属性和方法,dir()函数还可以用于动态调用对象方法,例如:
class MyClass:
def mymethod(self):
print("Hello world!")
myobj = MyClass()
getattr(myobj, 'mymethod')()
上面代码定义了一个MyClass类,其中包含一个mymethod()方法。我们通过使用getattr()函数来获得该方法,并调用该方法来输出字符串“Hello world!”。
3. 筛选出指定类型的方法和属性
在一些情况下,我们希望筛选出指定类型的方法和属性。例如,我们希望筛选出所有的函数属性,可以使用以下代码:
def myfunc():
pass
class MyClass:
def mymethod(self):
pass
myvar = 1
print([item for item in dir(MyClass) if callable(getattr(MyClass, item))])
print([item for item in dir(myfunc) if callable(getattr(myfunc, item))])
上面代码输出MyClass定义的所有函数属性和myfunc定义的所有函数属性:
['mymethod']
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
使用上面的代码,我们可以筛选出指定类型的属性和方法,并且对它们进行操作。
三、总结
dir()函数可以帮助我们快速了解一个对象的所有属性和方法,包括Python的内置属性和方法。我们可以用dir()函数来动态调用对象方法,筛选出指定类型的方法和属性等等。在实际开发中,dir()函数是非常有用的一个函数,希望本文能对读者有所帮助。