class meta(type): def __init__(cls, name, bases, dict): super(meta, cls).__init__(name, bases, dict) for base in cls.__bases__: try: cls.__stuff__.update(base.__stuff__) except: pass class A: __metaclass__ = meta __stuff__ = { "stuffA" : ""} class B(A): __stuff__ = { "stuffB" : ""} class C(A): __stuff__ = { "stuffC" : ""} class D(B, C): __stuff__= { "stuffD" : ""} class E(D): __stuff__ = { "stuffE" : ""} x=E() print x.__stuff__