git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

What's the purpose the hook method showing in a class definition?


Sibylle Koczian? 2019?10?20???? UTC+8??2?04?54????
> Am 19.10.2019 um 13:11 schrieb jfong at 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