在Python中给实例的__class__属性赋值

26 投票
1 回答
5905 浏览
提问于 2025-04-16 10:51

在什么情况下可以给一个实例的 __class__ 属性赋值,什么时候又不可以呢?

TypeError: __class__ assignment: only for heap types 这样的错误信息对我来说并不太有帮助。

1 个回答

17

你只能给一个用户自定义类的实例(也就是用 class 关键字定义的类)赋值 __class__ 属性,而且新的值也必须是一个用户自定义的类。至于这些类是新式类还是旧式类其实没关系。(不过你不能把旧式类的实例变成新式类的实例。)想了解更多,可以看看 Python 的 bug 跟踪器中的 这个问题,里面也提到错误信息有点难理解。

再补充一下 Rafe 在上面评论中说的:在生产环境中绝对不要这样做

撰写回答