擅长:python、mysql、java
<p>您的线路:</p>
<pre><code>x.a=5
</code></pre>
<p>将<em>新的</em>属性指定给<em>实例</em>,屏蔽class属性。如果没有这个赋值,实例就没有属性<code>a</code>,而是找到类属性<code>Singleton.a</code>。你知道吗</p>
<p>同时,您的<code>__new__</code>函数继续更改<code>Singleton.a</code>类属性,但是当您访问<code>a</code>实例属性时,不再参考它。你知道吗</p>
<p>如果改为更改class属性,代码将正常工作:</p>
<pre><code>Singleton.a = 5
</code></pre>
<p>或者您给了<code>Singleton</code>类一个属性,该属性将对<code>a</code>的访问委托给class属性:</p>
<pre><code>class Singleton(object):
_instance = None
a = 0
def __new__(self):
if not self._instance:
self._instance = super(Singleton,self).__new__(self)
self.a += 1
return self._instance
@property
def a(self):
return Singleton.a
@a.setter
def a(self, value):
Singleton.a = value
</code></pre>
<p>或者在实例而不是类上设置属性:</p>
<pre><code>class Singleton(object):
_instance = None
a = 0
def __new__(self):
if not self._instance:
self._instance = super(Singleton,self).__new__(self)
self._instance.a += 1
return self._instance
</code></pre>
<p>反正是单身。你知道吗</p>