Магический метод __str__ не вызывается при вызове str - PullRequest
0 голосов
/ 06 ноября 2018

Я создатель библиотеки module-wrapper и один из авторов библиотеки aioify . Проблема возникает в заклинании магического метода внутри библиотеки module-wrapper (я называю module_wrapper.wrap из aioify.aioify, но это не имеет значения).

У меня есть следующий код:

#!/usr/bin/env python
from aioify import aioify


async def main():
    from pathlib import Path
    # noinspection PyPep8Naming
    AioPath = aioify(obj=Path)
    return await AioPath.create('/tmp')


if __name__ == '__main__':
    import asyncio
    loop = asyncio.get_event_loop()
    path = loop.run_until_complete(main())
    path_str = str(path)
    print(path_str)

Я ожидаю получить следующий вывод:

/tmp

Но я получаю это:

<module_wrapper.wrap.<locals>.ObjectProxy object at 0x7f64266a9b00>

Я не могу понять, почему. Когда я звоню:

path_str = path.__str__()
print(path_str)

Я получаю то, что ожидаю:

/tmp

Когда я устанавливаю точку останова внутри отладчик магического метода-обертки не останавливается.

UPD0: Чтобы воспроизвести это, вам нужно установить module-wrapper и aioify (из архива, потому что он не выпущен в PyPI). Не забудьте создать virtualenv раньше!):

pip install module-wrapper==0.1.26
pip install https://github.com/yifeikong/aioify/archive/0.3.0.zip

1 Ответ

0 голосов
/ 07 ноября 2018

Наконец-то решил. mseifert был прав, проблема была в том, что я не обернул магические методы класса. Смотрите исправленную версию на GitHub и PyPI.

...