Python 对象,`__name__` 存储在哪里?

Int*_*rer 5 python attributes object

__name__对 Python 对象中的存储位置感到困惑。

以 Python 为例str

In [1]: hasattr(str, "__name__")
Out[1]: True

In [2]: getattr(str, "__name__")
Out[2]: 'str'

In [3]: "__name__" in str.__dict__
Out[3]: False

In [4]: "__name__" in list(dir(str))
Out[4]: False
Run Code Online (Sandbox Code Playgroud)

您可以从[1]+ [2]that 中看到str.__name__,它具有值"str"。但是,我无法通过使用dir()和找到它的存储位置__dict__

我知道我遗漏了一些东西,但从我所有的阅读中我无法弄清楚。你能帮我么?

看过的地方

从这些问题:

  1. python __getattr__ 和 __name__
  2. 为什么 python 实例没有 __name__ 属性?
    • 谢谢大家指出#2
In [5]: str.__class__.__name__
Out[5]: 'type'

In [6]: "hi".__class__.__name__
Out[6]: 'str'
Run Code Online (Sandbox Code Playgroud)

可以看到一个str 实例__name__ = "str"存储在__class__.

班级__name__ = "str"内在哪里? str

在此先感谢您的帮助!

稍后编辑

原来这是一个重复。答案(如评论中所述)是:

In [1]: type.__dict__['__name__'].__get__(str)
Out[1]: 'str'
Run Code Online (Sandbox Code Playgroud)

推理可以在这些问题中找到: