我正在开发一个模块,我希望它是动态的,因为任何人都可以相对容易地添加特性。你知道吗
其基本思想是有一个类CriticBase
,它处理对这个部署的所有批评。critics
将是从CriticBase
继承的任何类。你知道吗
伪示例:
class CriticBase(Object) {
def self.Execute():
for critic in self.__subclasses__: critic.run()
}
class DatabaseCritic(CriticBase) { def run( //things ) }
class DiskSpaceCritic(CriticBase) { def run( //things ) }
etc...
def DoWork():
Controller = CriticBase()
a = DatabaseCritic()
b = DiskSpaceCritic()
...
Controller.Execute()
我希望这有点道理。基本上,这个想法是要有一个框架,其他开发人员可以直接添加到这个框架中。您所需要做的就是定义CriticBase
的一些子类,其他的一切都由critic框架来处理。你知道吗
然而,仅仅把这些类分配给一些永远不会被使用的东西对我来说是相当难看的。Python中是否存在延迟对象?我可以去掉赋值,并且仍然从基类引用实例化类吗?或者我必须将它分配给某个,否则它将被垃圾收集?你知道吗
我的理解是您不希望其他开发人员实例化子类。实际上,只要方法
run()
是类方法,它们就不需要这样做:通过这种方法,您可以使用python的继承机制将子类收集到一个列表中,并且您的代码不会出现无用的实例化。你知道吗
好吧,您可以使用发布和订阅模式来实现这一点。大致来说,可能是:
因为我对你的项目不太了解,所以我想说,为客户机创建一个基类而不是对服务器进行子分类是一个更好的主意。你知道吗
也许它没有太多的魔法,但它工作得很好,很容易理解和扩展(有时比纯魔法更好)。你知道吗
相关问题 更多 >
编程相关推荐