次の例では、CL2のsuperを「cl2 test cl5」のself.test()に置き換えると、同じ出力が得られます。どのようにしてスーパーが差をつけるのか。pythonのsuperは冗長ですか?
class CL1(object):
def test(self):
print "test cl1"
class CL2(CL1):
def abc(self):
print "in cl2"
super(CL2,self).test()
#self.test()
class CL3(CL1):
def test(self):
print "test cl3"
class CL5(CL1):
def test(self):
print "test cl5"
class CL4(CL2,CL5,CL3):
def add(self):
print 'cl4'
def main()
o=CL4()
o.abc()
if __name__ == "__main__":
main()
興味深い質問です。 「オブジェクト」以外のオブジェクトをサブクラス化するときは、絶対に必要です。 –
'super'は誤って命名されました。それは必ずしもそれが使用されているクラスの(単一の)静的に定義された親クラスを参照するとは限りません。 – chepner