擅长:python、mysql、java
<p>第一:你不想这样做,没有理由这么做,如果你认为你需要这样做,你就错了。在</p>
<p>第二:不能在<code>__init__</code>方法中执行此操作,因为引用新的<code>AnyClass</code>实例对象的名称引用<code>test</code>尚未添加到内存空间(“绑定”)。不过,你可以这样做。在</p>
<pre><code>class AnyClass():
def echo_name(self):
{v:k for k,v in locals().items()}[self]
test = AnyClass()
test.echo_name()
</code></pre>
<p>这将返回在分配给<code>locals()</code>对象的<code>locals()</code>字典中遇到的第一个变量。无法保证这些变量的返回顺序。在</p>
<hr/>
<p>要进一步解释为什么它在<code>__init__</code>方法中不起作用,请执行以下操作:</p>
^{pr2}$
<p>根据类定义(包括任何父类或元类的定义)的指令构造<code>AnyClass</code>的新实例。这种构造分阶段进行,最后一个阶段是执行<code>__init__</code>方法。在<code>__init__</code>之前,将要执行的其他方法是<code>__new__</code>,以及元类的<code>__new__</code>、<code>__init__</code>和{<cd13>}方法(如果存在的话)。在</p>
<p>所以在执行<code>__init__</code>方法体中的代码时,对象仍在构造中。因此,到目前为止,<code>locals()</code>字典中没有为名称<code>'test'</code>赋值。只有一个名为<code>'self'</code>的成员。而且,显然,如果您反向查找<code>locals()</code>字典中的<code>self</code>对象来查找注册名称,那么您将得到的名称是<code>'self'</code>。哪个。。。没用。在</p>