首页 > 解决方案 > Python:导入对象语义

问题描述

看起来当我导入一个对象(例如字典)时,我得到了它的一个(深度?)副本,在导入时拍摄。

一个用例。这显然不是一个好的样式示例;我对机械很感兴趣。

run.py

_ARGS = RestrictedDotDict()
...
def _set_args_click(context_params: dict) -> None:
    global _ARGS

    _ARGS = RestrictedDotDict(copy.deepcopy(context_params))

main.py

from .run import _set_args_click  # type: ignore
...
def main(**kwargs) -> int:
    _set_args_click(click.get_current_context().params)

    from .run import _ARGS  # type: ignore

    if _ARGS.context and not _ARGS.no_console:
        ...
        return 0
    ...
    return 0

此代码有效。也就是说,_ARGS列表被初始化,并且选项对if语句有效。

这样我得到的_ARGS列表尚未设置:

main.py

from .run import _set_args_click  # type: ignore
...
def main(**kwargs) -> int:

    from .run import _ARGS  # type: ignore

    _set_args_click(click.get_current_context().params)

    if _ARGS.context and not _ARGS.no_console:
        ...
        return 0
    ...
    return 0

这种效果意味着它_ARGS不是对来自 的对象的引用run.py。可能,这是有道理的:在缺少privateconst的语言中,这是一种很好的安全实践。

我的麻烦:我在文档中找不到说明这种情况发生的方式和原因的地方。可能,他们有自己的术语,我不知道。

标签: pythonimport

解决方案


推荐阅读