代码之家  ›  专栏  ›  技术社区  ›  Richard Rublev

如何用super构造类实例?

  •  -1
  • Richard Rublev  · 技术社区  · 6 年前

    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)
    

    这就是一个职业运动员的样子

    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)
    

    它也有很多其他的方法,但是那会占用太多的空间。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Thomas Weller    6 年前

    新的TravelingSalesManProblem实例与前一个实例有何不同?

    在步骤1中,您将分配状态

    self.state = state
    

    在第2步中,您将把距离矩阵作为参数传递给init方法

    super(TravellingSalesmanProblem, self).__init__(distant_matrix)
    

    init方法接受第一个参数并将其解释为 initial_state

    self.state = self.copy_state(initial_state)
    

    这意味着:原始状态丢失,遥远的矩阵变成你的状态。

    结论:一团糟。