【发布时间】:2011-02-21 13:07:06
【问题描述】:
经常说super 在 Python 2 中应该是 avoided。我在 Python 2 中使用 super 时发现,除非我提供所有参数,例如示例:
super(ThisClass, self).some_func(*args, **kwargs)
在我看来,这违背了使用super() 的目的,它既不简洁,也不比TheBaseClass.some_func(self, *args, **kwargs) 好得多。对于大多数目的,方法解析顺序是一个遥远的童话。
- 除了2.7 is the last major release 到 Python 2 之外,为什么 super 在 Python 2 中仍然存在问题?
- Python 3's super 如何以及为何发生了变化?有什么注意事项吗?
- 以后我应该在什么时候以及为什么使用
super?
【问题讨论】:
-
你没有给出任何你认为 super 被破坏的 why 的例子,除了它并不比显式调用基类更短,这既不是这里也不是那里...您显然不了解 super() 的用途(用于通过多重继承安全地向上调用)。
-
@fuzzyman:那是主观的,模糊不是我名字的一部分:)
-
嗯,不。 “破碎”不是一个主观概念,在某些情况下需要。所以你没有解释为什么你认为 super 坏了(除了参考一篇没有这么说的文章),你也没有表现出任何理解 super 是 for 的样子(提示:它不等同于您展示的替代品)。
-
当您说
TheBaseClass.some_func(self, *args, **kwargs)比super更好时,您假设TheBaseClass始终是ThisClass的祖先,如果您有多重继承(或某人之后添加)。super(ThisClass, self)可能解析为TheBaseClass以外的其他内容。super()。所以问题是你想打电话给链中的“下一个人”(最有可能)还是你想准确地打电话给TheBaseClass。
标签: python python-3.x multiple-inheritance super python-2.x