问题描述
如果这是真的,那么Python中的任何对象仅仅是名称空间吗?因为在导入模块时,我们使用与对象( example: module.function() & obj.method() )
相同的点约定来访问模块中的名称。我认为访问属性或对象的方法只是为您要访问的属性/方法指定名称空间。这是真的吗?
解决方法
否,您还将通过运行导入的模块中的所有顶级语句来初始化导入的模块(仅限首次导入)。
使用模块名称获得的引用可以访问导入的模块名称空间。此命名空间是通过dict实现的,访问mod.some_attribute
与访问mod.__dict__['some_attribute']
相同。
任何对象仅仅是名称空间吗?
不,它还有更多的东西(它拥有一个命名空间,它不是一个)。每个对象都是某个类的实例。自定义类使用内部__dict__
来以与模块相同的方式实现名称空间。
模块在Python文档中被称为代码的组织单位。实际上,您可以用相同的方式来考虑类,因为它们为您提供了命名空间功能。
但是,与类/对象一样,在模块中搜索属性时也无需考虑继承树。
如果您只想为自己的命名空间受益,那么请使用dict
或空的class
。甚至还有一个types.SimpleNamespace
类。
我认为访问属性或对象的方法仅仅是 指定您想要的属性/方法的名称空间 访问。这是真的吗?
或多或少(是的,除了“正义”一词外)。它使用对象名称(引用)来访问名称空间,并使用属性名称作为基础__dict__
对象的名称空间的键,但是隐式挂钩可能会在后台运行代码。