Я думаю, я заставил его работать.
Я создал метакласс, который наследуется от DeclarativeMeta, и сделал его метаклассом C1 и C2.В этом новом метаклассе я просто сказал:
def __new__(mcs, name, base, attr):
attr['__tablename__'] = name.lower()
attr['id'] = Column(Integer, primary_key = True)
attr['name'] = Column(String)
return super().__new__(mcs, name, base, attr)
И, похоже, он работает нормально.