if '__abstract__' not in dct:
    xid = Column(None, ForeignKey(Entity.id), primary_key=True)
setattr(cls, 'id', xid)
setattr(cls, '__mapper_args__', {'polymorphic_identity': dct['_identity'],
    'inherit_condition': (xid == Entity.id,), 'primary_key': (xid,)})
setattr(cls, '__tablename__', name.lower())
super(EntityMeta, cls).__init__(name, bases, dct)


class EntityRef(Entity):
    __abstract__ = True
Создание самореферентных таблиц с полиморфизмом в SQLALchemy