Это исключение может произойти в Python 2, если вы смешаете классы старого (классического) и нового стилей.
>>> class A(object):
... # New style class (inherits from object)
... pass
...
>>> class B:
... # Classic class - does not inherit from object
... # or any other new-style class
... def __init__(self):
... self.__class__ = A
...
>>> B()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
TypeError: __class__ must be set to a class
Классы старого и нового стиля на самом деле разные типы:
>>> type(A)
<type 'type'>
>>> type(B)
<type 'classobj'>
так что вы не можете заменить одно другим. Новые классы стиля были введены в Python 2.2; любой современный код Python 2 должен использовать их исключительно, если только он не унаследован от класса старого стиля (я думаю, что в стандартной библиотеке их еще может быть).
В Python 3 классы старого стиля были исключены. Следовательно, в Python 3 классы могут быть объявлены как классы старого стиля; это объявление создаст класс старого стиля в Python 2, но класс нового стиля в Python 3:
class A:
pass
Если вы создаете код Python 2 из примеров Python 3, важно знать об этой разнице.