Simulation of 2D elastic balls
There are a few things that can be improved here.


In Python, using a _ before a class variable denotes a protected member of the class, I don't think that was your intention so you can just make it the following without the preceding _'s in __init__ like this, and throughout the program.

self.mass = mass
self.radius = radius
self.position = position
self.velocity = velocity
self.vafter = np.copy(velocity) # temp storage for velocity of next step

Your compute_coil method is mostly just naming variables. 

Since we have alot of lines like this,

m1 = self.mass
m2 = ball.mass


we can re-write them on one line like this,

m1, m2 = self.mass, ball.mass


That would change the first part of your compute_coll method to,

m1, m2 = self.mass, ball.mass
r1, r2 = self.radius, ball.radius
v1, v2 = self.velocity, ball.velocity
x1, x2 = self.position, ball.position
di = x2-x1


which I feel reduces a lot of unnecessary clutter.
In your compute_coll method you have a little more tidying that can be done.

According to PEP 8,

v1-v2,di 


should be,

v1-v2, di


with whitespace after the ,. You also do this in a few of your other methods.
You miss some more whitespace in your step1 function around the != operator. 

if i!=j: 


should be,

if i != j:

In your function init_list(N), your argument N is uppercase. According to PEP 8 argument names should be lowercase.