获取模块名称:x.__module__ vs x.__class__.__module__

发布于 2024-10-21 17:34:55 字数 163 浏览 1 评论 0原文

我想获取Python对象所在的模块。两者

x.__module__

似乎都

x.__class__.__module__

有效。这些完全是多余的吗?有什么理由更喜欢其中一种吗?

I want to obtain the module from which a Python object is from. Both

x.__module__

and

x.__class__.__module__

seem to work. Are these completely redundant? Is there any reason to prefer one over another?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别念他 2024-10-28 17:34:55

如果 x 是一个类,那么 x.__module__x.__class__.__module__ 会给你不同的东西:

# (Python 3 sample; use 'class Example(object): pass' for Python 2)
>>> class Example: pass

>>> Example.__module__
'__main__'
>>> Example.__class__.__module__
'builtins'

对于一个没有定义的实例__module__ 直接使用类中的属性。

>>> Example().__module__
'__main__'

我认为你需要清楚你真正想了解什么模块。如果它是包含类定义的模块,那么最好明确这一点,所以我会使用 x.__class__.__module__。实例通常不会记录创建它们的模块,因此 x.__module__ 可能会产生误导。

If x is a class then x.__module__ and x.__class__.__module__ will give you different things:

# (Python 3 sample; use 'class Example(object): pass' for Python 2)
>>> class Example: pass

>>> Example.__module__
'__main__'
>>> Example.__class__.__module__
'builtins'

For an instance which doesn't define __module__ directly the attribute from the class is used instead.

>>> Example().__module__
'__main__'

I think you need to be clear what module you actually want to know about. If it is the module containing the class definition then it is best to be explicit about that, so I would use x.__class__.__module__. Instances don't generally record the module where they were created so x.__module__ may be misleading.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文