不可在str调用中调用魔术方法__str__

时间:2018-11-06 13:05:38

标签: python python-3.x wrapper magic-methods

我是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

当我设置断点inside时,魔术方法包装器功能调试器不会停止。

UPD0: 要重现此内容,您需要安装module-wrapperaioify(从tarball安装,因为它没有在PyPI上发布)。不要忘记之前创建virtualenv!):

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

1 个答案:

答案 0 :(得分:1)

最后解决了。 mseifert是正确的,问题是我没有包装该类的魔术方法。在GitHub和PyPI上查看固定版本。