擅长:python、mysql、java
<p>这可能有很多问题。让我们从顶部开始。看起来您实际上只是使用<code>ECollector</code>作为名称空间来分组一些函数。没关系,但是您要调用<code>ECollector.some_method</code>,您需要稍微改变一下,将这些方法转换为类方法:</p>
<pre><code>class ECollector:
"""error msg collector
this class should be used as 'global'"""
msgs = []
@classmethod
def addmsg(cls,msg):
cls.msgs.append(msg)
@classmethod
def clear(cls):
cls.msgs = []
</code></pre>
<p>这意味着无论何时调用<code>addmsg</code>或<code>clear</code>,它们都会得到类本身的隐式第一个参数。在我转换它的这种特殊方式下,每个子类都将得到它自己的<code>msgs</code>。如果希望所有子类共享一个<code>msgs</code>属性,那么可以将<code>cls</code>更改为<code>ECollector</code></p>
<p>另外,您还需要稍微改变一下子类,因为您是从<code>ECollector</code>子类化的,但是直接调用它的方法。您可以这样做:</p>
^{pr2}$