首页  >  文章  >  后端开发  >  Python 3.x 的 Super() 在没有参数的情况下如何工作?潜在的陷阱是什么?

Python 3.x 的 Super() 在没有参数的情况下如何工作?潜在的陷阱是什么?

Patricia Arquette
Patricia Arquette原创
2024-10-28 01:58:01977浏览

 How Does Python 3.x's Super() Work Without Arguments, and What Are the Potential Pitfalls?

Python 3.x 的超级魔法:解开谜团

Python 3.x 在其 super() 方法中引入了令人惊讶的转折,允许不带参数的调用。这种看似无害的变化在幕后却带来了重大的后果和内在的魔力。

揭开魔力

为了维护 DRY 原则,新的 super() 行为绕过了显式类命名。它有一个特殊的 class 单元格,用于检索原始类对象,避免了困扰之前超级方法的重新绑定的陷阱。

魔法的后果

不幸的是,这个魔法有一个缺点。将 super() 名称重新绑定到不同的变量(例如 super_)可能会破坏其功能。发生这种情况的原因是,仅当在方法中引用 super 或 class 时才会创建单元格。

实际陷阱

此行为可能会带来风险毫无戒心的程序员:

  • 重新绑定 super() 可能会导致意外的异常。
  • 依赖 super(type(self), self) 或 super(self.__class__, self) 可能会导致从派生类调用时处于无限递归中。
  • 返回新类对象的类装饰器可以使绑定到 super() 的类名无效。

超越 Super()

有趣的是,super() 并不是唯一受重新绑定问题影响的 Pythonic 实体。其他示例包括:PyPy 的 RPython 中的

  • this(类似于 super() 的 __class__)
  • 通过未绑定方法对象访问的实例方法(可能会破坏 @ property 和 @classmethod)
  • 在没有点符号的情况下调用时内置的 print、object 和 list

对开发人员的影响

虽然 super() 的魔力很有用,但仍需谨慎。了解其复杂性有助于防止运行时错误。使用重新绑定时,程序员应考虑显式引用 class 或利用替代的 super() 调用方法。

以上是Python 3.x 的 Super() 在没有参数的情况下如何工作?潜在的陷阱是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn