如何使用两个类实现多重继承。一个类是可选的。
我使用了装饰者:
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类名。
答案 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中,类层次结构从右到左定义