Синтаксис Python __init__ - PullRequest
       5

Синтаксис Python __init__

5 голосов
/ 16 мая 2011

Во время изучения Python у меня возникла путаница с синтаксисом инициализации классов с использованием наследования. В различных примерах я видел что-то вроде следующего:

class Foo(Bar):
    def __init__(self, arg, parent = None):
        Bar.__init__(self, parent)
        self.Baz = arg
        etc.

Хотя иногда это просто

class Foo(Bar):
    def __init__(self, arg):
        Bar.__init__(self)
        etc.

Когда нужно убедиться, что в качестве аргумента функций инициализации используется «родитель»? Спасибо.

Ответы [ 2 ]

9 голосов
/ 16 мая 2011

Обычно передача parent не обязательна, только когда конструктор родительского класса явно нуждается в таком аргументе.Это используется в некоторых иерархиях, таких как PyQt.

И хорошей формой инициализации родительского класса является использование super:

class Child(Father):
  def __init__(self):
    super(Child, self).__init__()
3 голосов
/ 16 мая 2011

В вашем примере переменная "родитель" вводит в заблуждение.Просто родительский класс МОЖЕТ требовать дополнительных аргументов, которые должны быть предоставлены

class Pet:
    def __init__(self,name):
        self.name = name

class Dog(Pet):
    def __init__(self,name,age):
        Pet.__init__(self,name)
        self.age = age

В этом примере родительский класс Pet требует атрибута (имени), а дочерний класс предоставляет его

Как указаноиспользуйте синтаксис super для вызова методов родительских классов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...