当我们导入一个模块时,我们只是让导入模块的名称空间可以从主模块访问吗?

2022-12-01 04:25:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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


1条回答
网友
1楼 · 发布于 2022-12-01 04:25:44

不,您还可以通过运行导入模块中的所有顶级语句(仅在第一次导入时)来初始化导入的模块

通过模块名称获得的引用可以访问导入的模块名称空间。这个名称空间是用dict实现的,访问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 just specifying the namespace for the attribute/method you'd like to access. Is this true ?

或多或少(是的,除了“公正”这个词)。它使用对象名(引用)来访问名称空间,属性名作为__dict__对象下的名称空间的键,但隐式挂钩可能会在幕后运行代码