Код: Выделить всё
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.12, основные И дополнительные интерпретаторы:
Код: Выделить всё
Код: Выделить всё
Код: Выделить всё
Исправление заключалось в добавлении этой строки в определение сайта Apache:
Код: Выделить всё
WSGIApplicationGroup %{GLOBAL}
Код: Выделить всё
>> ... forces the WSGI application to run in the main Python interpreter...
Код: Выделить всё
WSGIDaemonProcessEDIT
Это ошибка в Python 3.12.4 и более ранних версиях. См. gh-117482
Подробнее здесь: https://stackoverflow.com/questions/790 ... er-the-mro
Мобильная версия