这里有一个类似的问题,但如果是指“重新分类”,而我想要一个子类。
假设,我有一个 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
你如何看待这个想法本身,你能建议一个更好的实现吗?