Я хотел бы смочь сделать:
>>> class a(str):
... pass
...
>>> b = a()
>>> b.__class__ = str
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __class__ assignment: only for heap types
Я решил это следующим образом:
>>> class C(str):
... def __getattribute__(self, name):
... if name == '__class__':
... return str
... else:
... return super(C, self).__getattribute__(name)
...
>>> c = C()
>>> c.__class__
<type 'str'>
Только классы, которые были определены с помощью ключевого слова class
, могли использоваться для присвоения атрибута __ class __
:
>>> class C:
pass
>>> class D:
pass
>>> C().__class__ = D
>>>