Когда, где и как я могу измениться __ класс __ attr объекта?

Я хотел бы смочь сделать:

>>> 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
15
задан martineau 18 June 2017 в 16:25
поделиться

2 ответа

Я решил это следующим образом:

>>> 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'>
7
ответ дан 1 December 2019 в 04:57
поделиться

Только классы, которые были определены с помощью ключевого слова class , могли использоваться для присвоения атрибута __ class __ :

>>> class C:
    pass

>>> class D:
    pass

>>> C().__class__ = D
>>>
-1
ответ дан 1 December 2019 в 04:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: