No se puede hacer eso, cuando tu haces sobre un arreglo el operador [] es un sinonimo de array_push, por lo que no te regresa el ultimo elemento del arreglo.
Tienes que hacer algo asi:
Código PHP:
$count = 0;
while($producto = mysql_fetch_array($query,$conn){
$this->productos[$count] = new Producto();
//Esto lo puedo hacer????
$this->productos[$count]->codigo = $producto["codigo"];
$count++;
}