Как класс наследуется от базового класса - PullRequest
0 голосов
/ 10 апреля 2019

Вот часть кода из CS61A lab10, и я не знаю влияния какого-либо кода.

    class Expr:
        def __init__(self, *args):
            self.args = args
    class Name(Expr):
        def __init__(self, string):
            Expr.__init__(self, string)
            self.string = string

Класс Name унаследован от класса Expr и имеет экземпляр string,Однако я не знаю, для чего нужен код Expr.__init__(self, string).Это кажется бессмысленным, и я могу запустить весь код без этой строки.Так зачем нам эта строка?

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Для вашего конкретного примера это действительно бессмысленно, но фактическое поведение таково:

  • Вкл. Имя Класс, который вы вызываете конструктор Expr
  • Expr конструктор сохраняет свой параметр в переменной экземпляра self.args
  • В конце у экземпляра будет 2 способа доступа к строковому аргументу:

instance.args иinstance.string

Кроме того, это неправильный способ вызова родительского конструктора, вы должны использовать следующее:

python 2.x

class Name(Expr):
    def __init__(self, string):
        super(Name, self).__init__(string)
        self.string = string

python 3.x

class Name(Expr):
    def __init__(self, string):
        super().__init__(string)
        self.string = string
0 голосов
/ 10 апреля 2019

Фактически ваш класс Expr наследуется классом Name.

Когда вы наследуете от другого класса, вам нужно вызвать функцию конструктора (т.е. __init__()) родительского класса (Expr) в дочерний класс (Name).

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