开发者

Python inheritance - One constructor that calls a method that's overriden in child classes, which method is used?

I'm writing a c开发者_高级运维lass in python that has multiple subclasses in it I have:

class Parent:

   def __init__(self, parameters):
      self.MethodA(parameters)

   def MethodA(parameters):
      doStuff

class child1(Parent):

   def MethodA(parameters):
      doOtherStuff

Which method will be used when I make an object of type child1?


Try it and see:

class Parent(object):
    def __init__(self, params):
        self.method(params)

    def method(self, params):
        print "Parent's method called with", params

class Child(Parent):
    def method(self, params):
        print "Child's method called with", params

Child('foo')

outputs:

Child's method called with foo


child1.MethodA() would be called. Methods in most dynamic languages are essentially always virtual since the lookup of self is done at runtime.


It can be usefull for you - method resolution order.


All methods in Python are effectively virtual.

>>> class Parent(object):
      def __init__(self):
            self.MethodA()

    def MethodA(self):
          print 'A method'

>>> class child1(Parent):
    def MethodA(self):
          print 'child1 method'

>>> x = child1()
child1 method
>>> x.MethodA()
child1 method
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜