如何在Python中编程可选的多继承

时间:2013-12-05 00:26:08

标签: inheritance python-2.7 multiple-inheritance pycharm

如何使用两个类实现多重继承。一个类是可选的。

我使用了装饰者:

def optional_inherit(cls):                                                         

    if _config.GDRIVE_HOOK:
        from jinjacms2 import drivecms

        class cls(cls, drivecms.CmsDrive):
            pass
    return cls

@optional_inherit
class JinjaCMS(cmsbase.CmsHandler):

    def get(self):
        ...

但?还有另外一种方法吗? 装饰器中的类名“cls”报告:cls不是允许的PEP-8类名。

1 个答案:

答案 0 :(得分:0)

我在this great article找到了灵感:

def jinjacms_get(self):         # member function for JinjaCMS class
    ....

if config.GDRIVE_HOOK:          #optional multiple inheritance
    from jinjacms import drivecms
    JinjaCMS = type(str('JinjaCMS'), (drivecms.CmsDrive, cmsbase.CmsHandler), {'get': jinjacms_get})
else:
    JinjaCMS = type(str('JinjaCMS'), (cmsbase.CmsHandler, ), {'get': jinjacms_get})

在Python中,类层次结构从右到左定义