def __init__(self,
                 prevertex,
                 postvertex,
                 machine_time_step,
                 connector=None,
                 synapse_list=None,
                 synapse_dynamics=None,
                 constraints=None,
                 label=None):
        super(ProjectionEdge, self).__init__(prevertex,
                                             postvertex,
                                             constraints=constraints,
                                             label=label)
        self.connector = connector
        self.synapse_dynamics = synapse_dynamics

        self.synapse_list = synapse_list
        self.synapse_row_io = FixedSynapseRowIO()

        # If the synapse_list was not specified, create it using the connector
        if connector is not None and synapse_list is None:
            self.synapse_list = connector.generate_synapse_list(
                prevertex, postvertex, 1000.0 / machine_time_step)

        # If there are synapse dynamics for this connector, create a plastic
        # synapse list
        if synapse_dynamics is not None:
            self.synapse_row_io = synapse_dynamics.get_synapse_row_io()