要让一个类装饰器不破坏isinstance函数,可以采用以下方法:
下面是一个示例代码,展示了如何实现一个不破坏isinstance函数的类装饰器:
import functools
def decorator(cls):
@functools.wraps(cls)
class Wrapper(cls):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
return Wrapper
@decorator
class MyClass:
pass
obj = MyClass()
print(isinstance(obj, MyClass)) # 输出 True
在上述示例中,装饰器decorator
返回的是一个新类Wrapper
,该类继承自原始类cls
。通过使用functools.wraps
装饰器,将原始类的元信息复制到新类中。这样,通过isinstance函数检查对象的类型时,返回的结果仍然是正确的。
领取专属 10元无门槛券
手把手带您无忧上云