在Python中正确使用super - 我应该明确引用类名吗?

时间:2017-10-17 17:25:05

标签: python python-2.7 class-hierarchy

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都会为whee()返回相同的结果。我习惯了Bar中的语法。我有什么理由不使用Baz中的语法吗?

1 个答案:

答案 0 :(得分:7)

  

我有什么理由不能使用Baz中的语法吗?

是的,您不应该使用该语法。如果您从Baz继承,super()调用将解析为{{1并且你将陷入无限循环。这也适用于语法Baz.whee()

(好吧,实际上你会将递归限制和错误排除在外。但不管怎样,这都是一个问题。)