我创建了一个带有可选部件/类的Python包。当我使用此可选部分(OptClass)时,我必须更改类(ExampleClass)的继承。现在我使用以下代码:

if use_option :
    _opt_class =  __import__('package.my_module', globals(), locals(), ['OptClass']).OptClass
else :
    _opt_class = object # do not use the optional class

....

class ExampleClass(base_module.BaseHandler, _opt_class):

    ....


还有另一种Python方式可以解决此问题吗?例如使用动态继承或延迟加载,还是...?

最佳答案

我可能会使用类装饰器:

def optional_inherit(cls):
    if use_option:
        from package.my_module import OptClass
        class ExampleClassWithOptClass(cls, OptClass):
            pass
        return ExampleClassWithOptClass
    else:
        return cls

...

@optional_inherit
class ExampleClass(base_module.BaseHandler):
    ...


如果您经常这样做,则可以编写optional_inherit来接受参数。在这种情况下,为@optional_inherit(use_option, 'package.mymodule.OptClass')

10-04 22:22