如何解决Python中的dir...和vars...keys之间的区别?
Python对象将其实例变量存储在属于该对象的字典中。vars(x)
返回此字典(与一样x.__dict__
)。dir(x)
另一方面,返回的字典,其中包含x
“属性,其类的属性以及递归其类的基类的属性”。
当您使用点运算符访问对象的属性时,python所做的不仅仅是在该对象字典中查找该属性。一个常见的情况是whenx
是类的对象,C
您m
在其上调用方法。
class C(object):
def m(self):
print "m"
x = C()
x.m()
该方法m
未存储在中x.__dict__
。它是类的一个属性C
。当您调用时x.m()
,python将从查找in中开始x.__dict__
,但找不到它。但是,它知道x
是的一个实例C
,因此它将接下来查找,在其中C.__dict__
找到它,并m
以x
作为第一个参数进行调用。
所以之间的区别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']
解决方法
有没有之间的差异dir(…)
,并vars(…).keys()
在Python?
(我希望会有区别,因为否则会破坏“一种方法”的原则… :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。