在 Python 中正确使用 super —— 我应该明确引用 class 名称吗?

Proper use of super in Python -- should I reference the class name explicitly?

class Foo(object):
    def whee(self):
        return 77

class Bar(Foo):
    def whee(self):
        return super(Bar, self).whee() + 1

class Baz(Foo):
    def whee(self):
        return super(self.__class__, self).whee() + 1

BarBaz return whee() 的结果相同。我习惯了 Bar 中的语法。有什么理由我不应该使用 Baz 中的语法吗?

Is there any reason I shouldn't use the syntax in Baz?

是的,您不应该使用该语法是有原因的。 如果您从 Baz 继承,super() 调用将返回到Baz.whee() 你会陷入无限循环。这也适用于语法 super(type(self), self).whee().

(好吧,实际上你会破坏递归限制并出错。但无论哪种方式都是问题。)