Код: Выделить всё
Python 3.10.12 (main, Sep 11 2024, 15:47:36) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> class A:
... def __str__(self):
... return "A"
...
>>> class B(dict, A):
... pass
...
>>> B.__mro__
(, , , )
>>> str(B())
'A'
>>> str(dict())
'{}'
>>>
Это как-то связано с тем, что у dict вместо функции slot_wrapper?
Код: Выделить всё
>>> dict.__str__
>>> A.__str__
>>> B.__str__
В субинтерпретаторе Python 3.12 поведение отличается.
С этого началось мое расследование. Приложение Django, работающее в Apache с mod_wsgi, выявило разницу.
Проверка dict.__str__:
Python 3.10, основной И субинтерпретаторы :
Код: Выделить всё
Код: Выделить всё
Код: Выделить всё
Исправление заключалось в добавлении этой строки в определение сайта Apache:
Код: Выделить всё
WSGIApplicationGroup %{GLOBAL}
Код: Выделить всё
>> ... forces the WSGI application to run in the main Python interpreter...
Код: Выделить всё
WSGIDaemonProcessПодробнее здесь: https://stackoverflow.com/questions/790 ... er-the-mro