gpt4 book ai didi

python - 当我们导入一个模块时,我们是否只是让主模块可以访问导入模块的命名空间?

转载 作者:行者123 更新时间:2023-12-04 17:05:42 27 4
gpt4 key购买 nike

如果这是真的,那么 Python 中的任何对象都只是一个命名空间吗?因为当我们导入一个模块时,我们使用与对象相同的点约定( example: module.function() & obj.method() )访问模块中的名称。我认为访问对象的属性或方法只是为您要访问的属性/方法指定命名空间。这是真的?

最佳答案

不,您还通过运行其中的所有顶级语句来初始化导入的模块(仅在第一次导入时)。
通过模块名称获得的引用可以访问导入的模块命名空间。这个命名空间是用字典实现的,并访问 mod.some_attribute与访问 mod.__dict__['some_attribute'] 相同.

Is any object just a namespace ?


不,它是更多的东西(它拥有一个命名空间,它不是一个)。每个对象都是某个类的实例。自定义类碰巧以与模块相同的方式实现命名空间,使用内部 __dict__ .
模块在 Python 文档中被称为代码的组织单位。事实上,您可以以同样的方式思考类,因为它们为您提供命名空间功能。
但是在模块中搜索属性时没有考虑继承树,就像类/对象一样。
如果你想要一个命名空间对象只是为了命名空间本身的好处,请使用 dict ,或空的 class .甚至还有一个 types.SimpleNamespace类。

I think accessing an attribute or a method of an object is justspecifying the namespace for the attribute/method you'd like toaccess. Is this true ?


或多或少(即是的,除了“公正”这个词)。它使用对象名称(引用)来获取 namespace ,并使用属性名称作为基础 namespace __dict__ 的键。对象,但隐式钩子(Hook)可能会在幕后运行代码。

关于python - 当我们导入一个模块时,我们是否只是让主模块可以访问导入模块的命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63579253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com