从子类中引用非重写的超类方法的惯例是什么?

时间:2014-01-19 06:57:09

标签: python python-3.x

哪个是首选?我相信他们的结果完全相同。

self.inheritedMethodName(arguments)

或者:

ParentClass.inheritedMethodName(self, arguments)

我知道还有:

super().inheritedMethodName(arguments)

但我的理解是,这是不鼓励的。

1 个答案:

答案 0 :(得分:2)

第一个绝对是首选。这是Python的基本功能instance.method(...)被翻译为Class.method(instance, ...)。很少需要明确地使用第二种形式,它只会让阅读代码的人感到困惑,因为他们会想知道你为什么这么做。

更一般地说,为什么要根据是否覆盖它来调用方法?通常,您只需在对象上调用该方法,并让对象(包括其类层次结构)决定应该调用哪个实现。您通常只使用方法中的第三种形式(带super)来显式调用同一方法的超类版本。