来自pydocs
就像其身份一样,对象的类型也是不可更改的。 [1]
来自footnote
在某些受控条件下,有时可以更改对象的类型。不过,通常这不是一个好主意,因为如果处理不当,它可能会导致某些非常奇怪的行为。
在什么情况下我们可以更改对象的类型以及如何更改
答案 0 :(得分:2)
class A:
pass
class B:
pass
a = A()
isinstance(a, A) # True
isinstance(a, B) # False
a.__class__ # __main__.A
# changing the class
a.__class__ = B
isinstance(a, A) # False
isinstance(a, B) # True
a.__class__ # __main__.B
但是,我不记得有帮助的实际示例。通常,类修饰是在装饰器或元类创建类(不是类的对象)时进行的。例如,dataclasses.dataclass是一个装饰器,它接受一个类并在该类的基础上构造另一个类(请参见the source code)。