You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复制内置类问题:自定义类复制函数处理type类时触发类型错误

解决处理type类时class_operator函数的报错问题

你的class_operator函数在处理普通类时正常,但遇到type本身就触发TypeError,核心原因是**type作为Python的元类,它的__qualname__属性不是直接的字符串,而是一个getset_descriptor描述符对象**,直接把它传给type()构造器就会因为类型不匹配报错。

问题根源

普通用户自定义类的__qualname__是存储在类命名空间里的字符串,直接访问cls.__qualname__就能拿到正确值。但type作为Python内置的元类,它的部分属性(包括__qualname__)是通过描述符实现的——直接访问type.__qualname__得到的是描述符对象,而非实际的字符串"type",这就导致type()构造器接收了错误类型的参数。

修复方案

我们需要用getattr()来获取__qualname__的实际值,getattr()会触发描述符的__get__方法,返回真正的字符串。修改后的代码如下:

def class_operator(cls):
    namespace = dict(vars(cls))
    # 用getattr正确获取__qualname__,兼容元类情况
    qualname = getattr(cls, '__qualname__')
    # 这里保留你的命名空间修改逻辑
    # ... 
    return type(qualname, cls.__bases__, namespace)

验证效果

现在调用class_operator(type)就不会报错了,它会返回一个基于type创建的新类,和处理普通类的逻辑保持一致。

内容的提问来源于stack exchange,提问作者Azat Ibrakov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:04:36