この問題も発生しました。私はまた、多重継承で動作する可能性がある、メタクラスを使用して、それを解決:
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}
おかげ - これは間違いなく動作します - 私は(スーパーなどのように)もう少し一般的な何かを見つけ出すことができると期待していた以外にも、明示的に親クラスを参照伴いませんでした継承。 – gnr
クラス辞書を使用しているので、実際にはここで多くの継承を使用していません。代わりに、単にグローバルディクテーションにすることができます。同じ効果。 –