Sibylle Koczian於 2019年10月20日星期日 UTC+8上午2時04分54秒寫道: > Am 19.10.2019 um 13:11 schrieb jf...@ms4.hinet.net: > > For the two examples below: > > (1) > >>>> class A: > > ... def foo(self): > > ... self.goo() > > ... > >>>> class B(A): > > ... def goo(self): > > ... print(1) > > ... > > > > (2) > >>>> class A: > > ... def foo(self): > > ... self.goo() > > ... def goo(self): pass > > ... > >>>> class B(A): > > ... def goo(self): > > ... print(1) > > ... > > > > Both can get the same result: > >>>> b = B() > >>>> b.foo() > > 1 > >>>> > > > > What's the benefit of having the hook method goo() in class A in example 2? > > > > --Jach > > > None - as long as nobody tries one of those: > > a = A() > a.foo() > > or > > class C(A): > def foo(self): > super().foo() > print(2) > > c = C() > c.foo()
Yes, there will be an attribute error if no goo() was defined. What puzzles me is how a parent's method foo() can find its child's method goo(), no matter it was overwrote or not? MRO won't explain this and I can't find document about it also:-( --Jach -- https://mail.python.org/mailman/listinfo/python-list