在 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
Bar
和 Baz
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()
.
(好吧,实际上你会破坏递归限制并出错。但无论哪种方式都是问题。)
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
Bar
和 Baz
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()
.
(好吧,实际上你会破坏递归限制并出错。但无论哪种方式都是问题。)