python入门必会的助手函数:dir()函数

Python (183) 2023-07-06 22:07:34

今天我们来看一个非常重要的函数:dir()

中文说明:不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将限度地收集参数信息。

参数object: 对象、变量、类型。

版本:该函数在python各个版本中都有,但是每个版本中显示的属性细节有所不同。使用时注意区别。

英文说明:

dir([object])

Withoutarguments,returnthelistofnamesinthecurrentlocalscope.Withanargument,attempttoreturnalistof
validattributesforthatobject.

Iftheobjecthasamethodnamed__dir__(),thismethodwillbecalledandmustreturnthelistofattributes.This
allowsobjectsthatimplementacustom__getattr__()or__getattribute__()functiontocustomizethewaydir()
reportstheirattributes.

Iftheobjectdoesnotprovide__dir__(),thefunctiontriesitsbesttogatherinformationfromtheobject’
s__dict__attribute,ifdefined,andfromitstypeobject.Theresultinglistisnotnecessarilycomplete,andmaybe
inaccuratewhentheobjecthasacustom__getattr__().

Thedefaultdir()mechanismbehavesdifferentlywithdifferenttypesofobjects,asitattemptstoproducethemost
relevant,ratherthancomplete,information:

Iftheobjectisamoduleobject,thelistcontainsthenamesofthemodule’sattributes.

Iftheobjectisatypeorclassobject,thelistcontainsthenamesofitsattributes,andrecursivelyofthe
attributesofitsbases.

Otherwise,thelistcontainstheobject’sattributes’names,thenamesofitsclass’sattributes,andrecursively
oftheattributesofitsclass’sbaseclasses.

例如

>>>importstruct
>>>dir()#showthenamesinthemodulenamespace
['__builtins__','__doc__','__name__','struct']
>>>dir(struct)#showthenamesinthestructmodule
['Struct','__builtins__','__doc__','__file__','__name__',
'__package__','_clearcache','calcsize','error','pack','pack_into',
'unpack','unpack_from']
>>>classShape(object):
def__dir__(self):
return['area','perimeter','location']
>>>s=Shape()
>>>dir(s)
['area','perimeter','location']
NoteBecausedir()issuppliedprimarilyasaconvenienceforuseataninteractiveprompt,ittriestosupplyan
interestingsetofnamesmorethanittriestosupplyarigorouslyorconsistentlydefinedsetofnames,andits
detailedbehaviormaychangeacrossreleases.Forexample,metaclassattributesarenotintheresultlistwhenthe
argumentisaclass.

代码实例

>>>dir()
['__builtins__','__doc__','__name__','__package__']
>>>importstruct
>>>dir()
['__builtins__','__doc__','__name__','__package__','struct']
>>>dir(struct)
['Struct','__builtins__','__doc__','__file__','__name__','__package__','_clearcache','calcsize','error','pack',
'pack_into','unpack','unpack_from']
>>>classPerson(object):
...def__dir__(self):
...return["name","age","country"]
...
>>>dir(Person)
['__class__','__delattr__','__dict__','__dir__','__doc__','__format__','__getattribute__','__hash__','__init__',
'__module__','__new__','__reduce__','__reduce_ex__','__repr__','__setattr__','__sizeof__','__str__','__subclasshook__',
'__weakref__']
>>>tom=Person()
>>>dir(tom)
['age','country','name']
THE END

发表回复