有没有之间的差异dir(…)
,并vars(…).keys()
在Python?
(我希望会有区别,因为否则会破坏“一种方法”的原则… :)
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']
问题内容: 输出: 为什么自我中不存在“ 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的字符串。竖线符号是字节顺序标志;在这种情况下,不需要字节顺序标志,因此将其设置为,表示不适用。