Я тоже встречался с этой проблемой.Я решил это с помощью метакласса, который также может работать с множественным наследованием:
import six
class CheckerMeta(type):
def __new__(cls, name, bases, attrs):
new_class = super(CheckerMeta, cls).__new__(cls, name, bases, attrs)
base_configs = [bc.config for bc in bases if hasattr(bc, 'config')]
configs = base_configs + [new_class.config]
new_class.config = {}
for config in configs:
new_class.config.update(config)
return new_class
class BaseChecker(six.with_metaclass(CheckerMeta)):
config = {}
class CheckerA(BaseChecker):
config = {'a': 1}
class CheckerB(BaseChecker):
config = {'b': 2}
class CheckerC(CheckerA, CheckerB):
config = {'c': 3}
assert CheckerA.config == {'a': 1}
assert CheckerB.config == {'b': 2}
assert CheckerC.config == {'a': 1, 'b': 2, 'c':3}