说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的内置函数 dir() 可传入一个对象,它将返回这个对象的所有属性和方法列表,在不传参的时将返回当前本地作用域中的名称列表。它非常实用之处在于当我们面对一个对象想知道它有哪些属性和方法时,可以用它来查看。
以下是一些快速使用示例:
s = 'hello'
dir(s) # 返回字符串的所的属性和方法
'''
['__add__',
'__class__',
'__contains__',
...
'translate',
'upper',
'zfill']
'''
import struct
dir() # 显示模块名称空间中的名称
# ['__builtins__', '__name__', 'struct']
dir(struct) # 在 struct 模块中显示名称
'''
['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__',
'__initializing__', '__loader__', '__name__', '__package__',
'_clearcache', 'calcsize', 'error', 'pack', 'pack_into',
'unpack', 'unpack_from']
'''
# 自定义返回方法
class Shape:
def __dir__(self):
return ['area', 'perimeter', 'location']
s = Shape()
dir(s)
# ['area', 'location', 'perimeter']
它的语法是 dir([object])
,对象名称为可选传入。
当:
注意,结果可能不是包含所有的属性和方法。
因为 dir() 主要是为了便于在交互式时使用,所以它会试图返回人们感兴趣的名字集合,而不是试图保证结果的严格性或一致性,它具体的行为也可能在不同版本之间改变。例如,当实参是一个类时,metaclass 的属性不包含在结果列表中。
如果对象有一个名为 __dir__()
的特殊方法,那么该方法将被调用,并且必须返回一个属性列表。这允许实现自定义 __getattr__()
或 __getattribute__()
函数的对象能够自定义 dir() 来报告它们的属性。
如果对象未提供 __dir__()
方法,该函数会尽量从对象的 __dict__
属性和其类型对象中收集信息。得到的列表不一定是完整,如果对象带有自定义 __getattr__()
方法时,结果可能不准确。
默认的 dir() 机制对不同类型的对象行为不同,它会试图返回最相关而不是最全的信息:
它与 globals() locals() vars() 三个内置函数的区别,可参考 locals() 的相关介绍。
更新时间:2022-03-28 11:38:47 标签:python 对象 属性 方法