Наследование Python - какой конструктор вызывает метод, который переопределяет дочерние классы? - PullRequest
1 голос
/ 24 ноября 2010

Я пишу класс на python, в котором есть несколько подклассов:

class Parent:

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

   def MethodA(parameters):
      doStuff

class child1(Parent):

   def MethodA(parameters):
      doOtherStuff

Какой метод будет использоваться, когда я создаю объект типа child1?

Ответы [ 4 ]

3 голосов
/ 24 ноября 2010

Попробуйте и посмотрите:

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')

вывод:

Детский метод вызывается с помощью foo

1 голос
/ 24 ноября 2010

Это может быть полезно для вас - порядок разрешения метода .

1 голос
/ 24 ноября 2010

child1.MethodA() будет вызван.Методы в большинстве динамических языков по существу всегда виртуальны, поскольку поиск self выполняется во время выполнения.

0 голосов
/ 24 ноября 2010

Все методы в Python являются виртуальными.

>>> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...