How to access property of a prefab before Instantiating.

I am randomly generating instances of a group of prefabs. Currently this means there is an equal chance of generating each one. I would like to place a ‘weight’ on each prefab for its chance on being picked. I have setup a simple script to hold this property and placed it on each prefab. How can I access this property in my code? The prefabs count as Object datatypes and not GameObject so it isn’t as easy as GetComponent. I want to do this before creating GameObjects with them.

Putting the weights on the prefabs is so global… why don’t you put it on your prefab list? Seems to make more sense that way…
Then one prefab could be instantiated with different weights in different situations.

public List<WeightedPrefab> prefabPickList;

...
...

[System.Serializable]
public class WeightedPrefab
{
	public Transform prefab;
	public float weight;
}

EDIT: Some Example code:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[System.Serializable]
public class WeightedTile {
	public Transform tile;
	public float weight;
}

public class MapGenerator : MonoBehaviour {

	public List<WeightedTile> floorTiles;
	public List<WeightedTile> wallTiles;
	public float tileWidth = 1f;
	public float tileLength = 1f;


	void Start () {
		createARoom();
	}

	void createARoom()
	{
		int width = Random.Range(4,8);
		int length = Random.Range(4,8);

		for(int x = 0; x<width; x++) for(int z = 0; z<length; z++)
		{
			Transform tile;
			if (x==0 || x==width-1 || z==0 || z==length-1)
			{
				tile = pickWeightedOne(wallTiles);
			}else{
				tile = pickWeightedOne(floorTiles);
			}
			Instantiate(tile, new Vector3(x*tileWidth, 0, z*tileLength), Quaternion.identity);
		}
	}

	Transform pickWeightedOne(List<WeightedTile> tiles)
	{
		float weightSum = 0f;
		foreach(WeightedTile tile in tiles)
		{
			if (tile != null && tile.tile != null)
			{
				weightSum += tile.weight;
			} else {
				Debug.LogWarning("Warning. Found empty tile");
			}
		}
		
		float runningWeight = 0f;
		float pick = Random.Range(0f, weightSum);
		foreach(WeightedTile tile in tiles)
		{
			if (tile != null && tile.tile != null)
			{
				runningWeight += tile.weight;
				if (runningWeight>=pick) return tile.tile;
			}
		}
		Debug.LogError("OMG. We shouldn't be here");
		return null; // this should never be reached!
	}

}

Example Image