Проблема с количеством аргументов в __init __ () при использовании наследования - PullRequest
1 голос
/ 23 апреля 2020

Я новичок, пытающийся выполнить наследование, используя Python. Поэтому я решил практиковать примеры программ из книги Майкла Т. Гудрича "Структуры данных и алгоритмы в Python".

Вот код:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


class Progression:
    def __init__(self,start=0):
        self._current = start

    def _advanced(self):
        self._current += 1

    def __next__(self):
        if self._current is None:
            raise StopIteration()
        else:
            answer = self._current
            self._advanced()
            return answer

    def __iter__(self):
        return self

    def print_progression(self,n):
        print(' '.join(str(next(self)) for j in range(n)))


class ArithmeticProgression:
    def __init__(self,increment=1,start=0):
        super().__init__(start)
        self._increment = increment

    def _advance(self):
        self._current += self._increment

class GeometricProgression(Progression):

    def __init__(self,base=2,start=1):
        super().__init__(start)
        self._base = base

    def _advance(self):
        self._current *= self._base

class FibonacciProgression(Progression):
    def __init__(self,first=0,second=1):
        super().__init__(first)
        self._prev = second - first

    def _advance(self):
        self._prev, self._current = self._current,self._prev + self._current

if __name__ == '__main__':
    print('Default Progression: ')
    Progression().print_progression(10)

    print('Arithmetic progression with increment 5 and start 2:')
    ArithmeticProgression(5,2).print_progression(10)

    print('Geometric progression with default base:')
    GeometricProgression().print_progression(10)

    print('Geometric progression with increasing it to the power of 2')
    GeometricProgression(3).print_progression(10)

    print('Fibonacci progression with default start progression')
    FibonacciProgression().print_progression(10)

    print('Fibonacci progression with default start progression')
    FibonacciProgression(4,6).print_progression(10)

Вот ошибка:

Default Progression: 
0 1 2 3 4 5 6 7 8 9
Arithmetic progression with increment 5 and start 2:
Traceback (most recent call last):

  File "some location", line 61, in <module>
    ArithmeticProgression(5,2).print_progression(10)

  File "some location", line 33, in __init__
    super().__init__(start)

TypeError: object.__init__() takes exactly one argument (the instance to initialize)

Любая помощь будет оценена. Здесь я пытаюсь проверить super (). init (начало) ArithmeticProgression, но очень запутываюсь с передачей элементов в примере init (). Любая помощь будет оценена. Также я новичок.

1 Ответ

1 голос
/ 23 апреля 2020

ArithmeticProgression не наследуется от прогрессии, как GeometricProgression. Так что нет базового класса для вызова с super().

Замените class ArithmeticProgression(Progression): на class ArithmeticProgression:

Чтобы сделать его коротким: вы просто забыли (Progression)

...