当前位置: 代码迷 >> python >> 动态返回Python中的类实现
  详细解决方案

动态返回Python中的类实现

热度:11   发布时间:2023-07-14 08:47:44.0

我试图获得要在另一个模块中使用的对象的动态实现。

可以用作

  • get_implementation('Implementation1')
  • get_implementation('Implementation2')

目的是拥有可轻松扩展的可维护代码-例如,我可以添加另一个名为Implementation3类,并使其工作而无需更改核心功能。

这是一个好方法还是任何建议?

get_implementation(name):
   if name:
      return getattr(name)

class Base()
    def __init__(self, args1, arg2, arg3, arg4....):

class Implementation1()
    def __init__(self, *args):

class Implementation2()
    def __init__(self, *args):
  • 这是一个好方法还是我有更好的选择?
  • 这是针对Zope框架的-我是否需要选择任何可能做到这一点的API?

您可以使用globals()动态访问当前模块中的全局对象:

def get_implementation(name):
    return globals()[name]

但呼叫者可以使用:

getattr(module, name)

代替

module.get_implementation(name)

相反,如果名称必须是动态的。

如果您使用的是Zope,请考虑将您的类注册为实用程序; 您可以使用getUtility(interface)getUtility(interface, name=name)查找实现,而不用将实现限制为一个模块,以后可以从任何模块或单独的程序包中注册这些实用程序。