2023-09-22 17:59:31 发布
网友
如果这是真的,那么Python中的任何对象都只是一个名称空间吗?因为当我们导入模块时,我们使用与对象( example: module.function() & obj.method() )相同的点约定来访问模块中的名称。我认为访问对象的属性或方法只是为您想要访问的属性/方法指定名称空间。这是真的吗
( example: module.function() & obj.method() )
不,您还可以通过运行导入模块中的所有顶级语句(仅在第一次导入时)来初始化导入的模块
通过模块名称获得的引用可以访问导入的模块名称空间。这个名称空间是用dict实现的,访问mod.some_attribute与访问mod.__dict__['some_attribute']是相同的
mod.some_attribute
mod.__dict__['some_attribute']
Is any object just a namespace ?
不,它是更多的东西(它拥有一个名称空间,它不是一个)。每个对象都是某个类的实例。自定义类恰好使用内部__dict__以与模块相同的方式实现名称空间
__dict__
在Python文档中,模块被称为代码的组织单元。实际上,您可以用同样的方式来考虑类,因为它们为您提供了名称空间功能
但是,在模块中搜索属性时,并没有像类/对象那样考虑继承树
如果您想要一个名称空间对象只是为了名称空间本身,请使用dict或空的class。甚至还有一个types.SimpleNamespace类用于此
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__对象下的名称空间的键,但隐式挂钩可能会在幕后运行代码
不,您还可以通过运行导入模块中的所有顶级语句(仅在第一次导入时)来初始化导入的模块
通过模块名称获得的引用可以访问导入的模块名称空间。这个名称空间是用dict实现的,访问
mod.some_attribute
与访问mod.__dict__['some_attribute']
是相同的不,它是更多的东西(它拥有一个名称空间,它不是一个)。每个对象都是某个类的实例。自定义类恰好使用内部
__dict__
以与模块相同的方式实现名称空间在Python文档中,模块被称为代码的组织单元。实际上,您可以用同样的方式来考虑类,因为它们为您提供了名称空间功能
但是,在模块中搜索属性时,并没有像类/对象那样考虑继承树
如果您想要一个名称空间对象只是为了名称空间本身,请使用
dict
或空的class
。甚至还有一个types.SimpleNamespace
类用于此或多或少(是的,除了“公正”这个词)。它使用对象名(引用)来访问名称空间,属性名作为
__dict__
对象下的名称空间的键,但隐式挂钩可能会在幕后运行代码相关问题 更多 >
编程相关推荐