更改python对象的类(广播)

发布于 2021-01-29 18:38:12

在此python文档页面上,它说:

像其身份一样,对象的类型也是不可更改的。

我尝试这个脚本,

#!python3

class Foo:
  num = 1
  pass

class Bar:
  num = 2
  pass

f1,f2= Foo(), Foo()

f2.__class__ = Bar
print( type(f1), type(f2), f1.num, f2.num )

结果显示:

<class '__main__.Foo'> <class '__main__.Bar'> 1 2

我想我更改了typef2
怎么了,我想念什么?

关注者
0
被浏览
192
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    该页面的脚注说:

    [1]在某些情况下,在某些受控条件下可以更改对象的类型。但是,通常这不是一个好主意,因为如果处理不当,它可能会导致某些非常奇怪的行为。

    如果您尝试将__class__f2的更改为list

    f2.__class__ = list
    

    引发TypeError:

    TypeError: __class__ assignment: only for heap types
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看