我创建了一个带有可选部件/类的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')
。