gpt4 book ai didi

Python - 一种实例化类而不分配它的方法?

转载 作者:行者123 更新时间:2023-11-28 22:42:43 24 4
gpt4 key购买 nike

我正在开发一个我希望有点动态的模块,因为任何人都可以相对轻松地添加功能。

基本的想法是有一个类,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() 方法是类方法即可:

# 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()

通过这种方法,您可以使用 Python 的继承机制将子类收集到一个列表中,并且您的代码没有无用的实例化。

关于Python - 一种实例化类而不分配它的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31477305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com