擅长:python、mysql、java
<p>我的理解是您不希望其他开发人员实例化子类。实际上,只要方法<code>run()</code>是类方法,它们就不需要这样做:</p>
<pre><code># The framework provides this base class
class CriticBase(object):
@classmethod
def execute(cls):
for critic_class in cls.__subclasses__():
critic_class.run()
# Devs only need to provide a definition of subclass
class DatabaseCritic(CriticBase):
@classmethod
def run(cls):
# do something specific about database
class DiskSpaceCritic(CriticBase):
@classmethod
def run(cls):
# do something specific about disk space
# now the base class do all the work
def DoWork():
CriticBase.execute()
</code></pre>
<p>通过这种方法,您可以使用python的继承机制将子类收集到一个列表中,并且您的代码不会出现无用的实例化。你知道吗</p>