当前位置: 首页 > 面试题库 >

Python中的dir(...)和vars(...)。keys()之间的区别?

苍元章
2023-03-14
问题内容

有没有之间的差异dir(…),并vars(…).keys()在Python?

(我希望会有区别,因为否则会破坏“一种方法”的原则… :)


问题答案:

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

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

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__找到它,并mx作为第一个参数进行调用。

所以之间的区别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']


 类似资料:
  • 问题内容: 输出: 为什么自我中不存在“ f”。dict 问题答案: 不仅仅是查找 首先,是一种API方法,它知道如何使用属性来查找对象的属性。 但是,并非所有对象都具有属性。例如,如果要向自定义类添加属性,则该类的实例将没有属性,但仍可以列出这些实例上的可用属性: 同样适用于许多内置类型。没有属性,但是您仍然可以使用列出所有属性: 实例有什么用 Python实例具有自己的,但它们的类也有: 该方

  • 问题内容: 是什么区别和?他们返回什么?更新结果有用吗? 问题答案: 这些每个都返回一个字典: 总是返回模块名称空间的字典 总是返回当前名称空间的字典 回当前名称空间的字典(如果不带参数调用)或参数的字典。 并vars可以使用更多解释。如果在函数内部调用,它将使用该时刻的当前局部变量名称空间(加上任何闭包变量)的值来更新字典并返回它。每次对同一堆栈框架的多次调用都会返回相同的字典-它作为其属性附加

  • 本文向大家介绍C和Python之间的区别,包括了C和Python之间的区别的使用技巧和注意事项,需要的朋友参考一下 C和Python都是主要使用的编程语言。各种特性使它们在程序设计领域流行。根据这些特征,我们可以区分C和Python。 以下是C和Python之间的重要区别。 序号 键 C语言 Python语言 定义 Python是一种通用的解释型,交互式,面向对象的高级编程语言。 类型 另一方面,

  • 本文向大家介绍Python和Bash之间的区别,包括了Python和Bash之间的区别的使用技巧和注意事项,需要的朋友参考一下 Python Python是一种编程语言,旨在易于实现和易于理解。它是一种动态类型的语言。它不使用指针。 重击 Bash是命令行解释器,默认情况下在Linux和MacOS操作系统中提供。它也可以安装在其他操作系统中。它是Linux和MacOS的默认用户外壳程序。 以下是P

  • 问题内容: 我可以给模块中的变量赋值吗?如果是,则类和模块之间有什么区别? PS:我是一个Java专家(以防它有助于解释)。谢谢。 问题答案: 模块 : 模块是包含Python定义和语句的文件。 正如医生所说。 因此,python中的模块只是组织代码的一种简单方式,它包含python类或仅包含函数。如果您在项目中需要这些类或函数,则只需它们。例如,python中的模块仅包含一堆函数,而您只需调用所

  • 问题内容: 我有两个字符串数组: S1和S2有什么区别?只是他们持有不同长度的条目吗? 如果我的数组具有 不同长度的 字符串怎么办? 在哪里可以找到所有可能的dtype的列表及其含义? 问题答案: 请参阅文档。 的和字符串是数据类型描述符; 第一个表示数组保存长度为1的字符串,第二个表示长度为2的字符串。竖线符号是字节顺序标志;在这种情况下,不需要字节顺序标志,因此将其设置为,表示不适用。