【问题标题】:Explain __dict__ attribute [duplicate]解释 __dict__ 属性[重复]
【发布时间】:2013-11-23 07:39:22
【问题描述】:

我真的对__dict__ 属性感到困惑。我已经搜索了很多,但我仍然不确定输出。

如果在对象、类或函数中使用此属性,有人能从零开始解释它的用法吗?

【问题讨论】:

  • 如果我们不了解您的困惑,任何人都无法减轻您的困惑。如果您试图解释这一点,那么您可能有一个针对该网站的主题问题。
  • 为避免重复,这个问题可以扩展为询问 dict 转换是如何工作的。

标签: python


【解决方案1】:

基本上它包含描述所讨论对象的所有属性。它可用于更改或读取属性。 引用自the documentation for __dict__

用于存储对象(可写)属性的字典或其他映射对象。

记住,在 Python 中一切都是对象。当我说一切时,我指的是函数、类、对象等一切(你没看错,类。类也是对象)。例如:

def func():
    pass

func.temp = 1

print(func.__dict__)

class TempClass:
    a = 1
    def temp_function(self):
        pass

print(TempClass.__dict__)

会输出

{'temp': 1}
{'__module__': '__main__', 
 'a': 1, 
 'temp_function': <function TempClass.temp_function at 0x10a3a2950>, 
 '__dict__': <attribute '__dict__' of 'TempClass' objects>, 
 '__weakref__': <attribute '__weakref__' of 'TempClass' objects>, 
 '__doc__': None}

【讨论】:

  • 嗨,如果在 func 的定义中是语句 z=10 为什么在 func.__dict__ 的输出中我看到 {} ?假设语句 func.temp=1 next 存在。
  • @Zakos __dict__ 将保存描述对象的属性。对于一个类,它里面的变量定义了这个类,但对于一个函数,它不是。
  • dict 不会打印 'a' : 1 因为它没有在 init 方法中设置
  • @rotemx 我们这里不是在讨论成员变量。如果您看到 print 语句,我们正在打印类本身的 __dict__,而不是它的实例。
  • 我在 Python 中的默认数据类型上尝试过这个,但它报错了 AttribueError,这是任何原因。
猜你喜欢
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2011-11-21
相关资源
最近更新 更多