擅长:python、mysql、java
<p>您将类变量与实例变量混淆(这很容易做到,因为在没有初始化的实例变量的情况下,查找会找到类变量)。在本例中,您已经显式地说<code>default_sth</code>是一个类变量,而您的意思是为实例变量设置一个默认值。改用这个:</p>
<pre><code>class BaseClass(object):
def __init__(self, sth=None):
if sth is None:
sth = []
def foo(self):
for sth in self.sth:
pass
</code></pre>
<p>您可能会对使用“硬编码”默认值有点犹豫,但您只是通过尝试为默认值使用单独的名称来增加详细程度。只需注释并记录您的<code>__init__</code>方法,以指示<code>sth</code>是什么,如果不是,它的默认值应该是什么
传递其他值。除非你有充分的理由,否则不要试图让默认设置本身可配置。在</p>
<p>就不变性而言,只有<em>元组</em>是不可变的,而不是引用它的名称。没有什么能阻止别人使用你的原始代码</p>
^{pr2}$
<p>尽管要从<code>default_sth</code>开始创建元组,但您还是回到了开始的地方。在</p>