0

这里有一个类似的问题,但如果是指“重新分类”,而我想要一个子类。

假设,我有一个 Django/SQLAlchemy 异常IntegrityError,并且我希望它的一个子类AlreadyExists在违反唯一约束时调用特殊情况:

    try:
         ...
    except IntegrityError as exc:
        if ('violates unique constraint '
                '"customer_wish_customer_product_unique"') in exc.message:
            raise AlreadyExists(exc)

我不想只做一个子类,因为IntegrityError.__init__有很多参数,我不想手动从现有IntegrityError实例中提取并将它们提供给 parent __init__

所以我想出了以下代码:

class AlreadyExists(IntegrityError):

    def __new__(cls, sa_exc):
        sa_exc.__class__ = cls  # replace the class
        return sa_exc  # but do not create new object

    def __init__(self, *args):
        pass  # do nothing, as no new object was created

你如何看待这个想法本身,你能建议一个更好的实现吗?

4

0 回答 0