python教程—区别dir(€¦)和var(€¦). keys()在Python中?-Python实用宝典

python教程—区别dir(€¦)和var(€¦). keys()在Python中?

有什么区别dir(€¦)和增值(€¦). keys()在Python中?(我希望有所不同,否则就会打破“一种方法”的原则……:)

Is there a difference between dir(…) and vars(…).keys() in Python?

(我希望有所不同,否则就会打破“一种方法”的原则……:)

回答

Python对象将它们的实例变量存储在属于该对象的字典中。vars(x)返回此字典(与x. _dict__一样)。另一方面,dir(x)返回x的“属性、类的属性以及该类基类的递归属性”的字典。

当您使用点操作符访问对象的属性时,python所做的不仅仅是在对象字典中查找属性。一个常见的情况是,当x是类C的对象时,您在其上调用一个方法m。

    class C(object): def m(self): print "m" x = C() x.m()

方法m不存储在x._ dict__中。它是类C的一个属性。
当您调用x.m()时,python将首先在x中查找m。但是它不会找到它。但是,它知道x是C的一个实例,所以它接下来将查看C。在那里找到它,并以x作为第一个参数调用m。

因此,vars(x)和dir(x)之间的区别是,dir(x)执行额外的工作,在x的类(及其基)中查找可从中访问的属性,而不仅仅是存储在x自己的符号表中的属性。在上面的例子中,vars(x)返回一个空字典,因为x没有实例变量。然而,dir (x)的回报

    ['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', 'm']

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论