前面在介绍 Python 内置函数时,提到了 dir() 函数,通过此函数可以某个对象拥有的所有的属性名和方法名,该函数会返回一个包含有所有属性名和方法名的有序列表。
举个例子:
<pre class="python sh_python snippet-formatted sh_sourceCode" style="margin: 0px; display: block; padding: 0px; font-size: 14px; line-height: 1.6em; color: rgb(102, 102, 102); white-space: pre-wrap; overflow-wrap: break-word; background: none; border: none; border-radius: 0px;">
1. class CLanguage:
2. def __init__ (self,):
3. self.name = "C语言中文网"
4. self.add = "http://c.biancheng.net"
5. def say():
6. pass
7. clangs = CLanguage()
8. print(dir(clangs))
</pre>
程序运行结果为:
['class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref', 'add', 'name', 'say']
注意,通过 dir() 函数,不仅仅输出本类中新添加的属性名和方法(最后 3 个),还会输出从父类(这里为 object 类)继承得到的属性名和方法名。
值得一提的是,dir() 函数的内部实现,其实是在调用参数对象 dir() 方法的基础上,对该方法返回的属性名和方法名做了排序。
所以,除了使用 dir() 函数,我们完全可以自行调用该对象具有的 dir() 方法:
<pre class="python sh_python snippet-formatted sh_sourceCode" style="margin: 0px; display: block; padding: 0px; font-size: 14px; line-height: 1.6em; color: rgb(102, 102, 102); white-space: pre-wrap; overflow-wrap: break-word; background: none; border: none; border-radius: 0px;">
1. class CLanguage:
2. def __init__ (self,):
3. self.name = "C语言中文网"
4. self.add = "http://c.biancheng.net"
5. def say():
6. pass
7. clangs = CLanguage()
8. print(clangs.__dir__())
</pre>
程序运行结果为:
['name', 'add', 'module', 'init', 'say', 'dict', 'weakref', 'doc', 'repr', 'hash', 'str', 'getattribute', 'setattr', 'delattr', 'lt', 'le', 'eq', 'ne', 'gt', 'ge', 'new', 'reduce_ex', 'reduce', 'subclasshook', 'init_subclass', 'format', 'sizeof', 'dir', 'class']
显然,使用 dir() 方法和 dir() 函数输出的数据是相同,仅仅顺序不同。
网友评论