Как построить экземпляр класса с супер? - PullRequest
0 голосов
/ 19 сентября 2018

Я сейчас смотрю на этот пример

class TravellingSalesmanProblem(Annealer):

    """Test annealer with a travelling salesman problem.
    """

    # pass extra data (the distance matrix) into the constructor
    def __init__(self, state, distance_matrix):
        self.distance_matrix = distance_matrix
        super(TravellingSalesmanProblem, self).__init__(state)  # important!

Клонировано из simanneal

Если я решу изменить конструктор

def __init__(self, state, distance_matrix):
    self.state = state
    super(TravellingSalesmanProblem, self).__init__(distant_matrix)

Так выглядит класс Anealer

class Annealer(object):
       __metaclass__ = abc.ABCMeta

    # defaults
    Tmax = 25000.0
    Tmin = 2.5
    steps = 50000
    updates = 100
    copy_strategy = 'deepcopy'
    user_exit = False
    save_state_on_exit = False

    # placeholders
    best_state = None
    best_energy = None
    start = None

    def __init__(self, initial_state=None, load_state=None):
        if initial_state is not None:
            self.state = self.copy_state(initial_state)
        elif load_state:
            self.load_state(load_state)
        else:
            raise ValueError('No valid values supplied for neither \
            initial_state nor load_state')

        signal.signal(signal.SIGINT, self.set_user_exit)

У него тоже есть куча других методов, но это заняло бы слишком много места.

Как новый экземпляр TravellingSalesmanProblem будет отличаться от предыдущего

1 Ответ

0 голосов
/ 19 сентября 2018

Как новый экземпляр TravellingSalesmanProblem будет отличаться от предыдущего?

На шаге 1 вы бы присвоили состояние

self.state = state

На шаге 2 вы быпередать дистанционную матрицу в качестве параметра методу init

super(TravellingSalesmanProblem, self).__init__(distant_matrix)

Этот метод init принимает первый параметр и интерпретирует его как initial_state.

self.state = self.copy_state(initial_state)

Это означает: исходное состояниетеряется и удаленная матрица становится вашим состоянием.

Вывод: это беспорядок.

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