I know there are better solutions. This seems very easy/readable and a little bit different, though.

Basically: Draw a line between two **distinct** points and then look for other distinct colinear points. If a,b,c and a,b,d are colinear this means all of them are on the same line.

```
def is_collinear(p1, p2, p3):
return (p2.y - p1.y) * (p3.x - p2.x) == (p3.y - p2.y) * (p2.x - p1.x)
class MyPoint(object):
def __init__(self, x, y):
self.x = x
self.y = y
def __hash__(self):
return hash((self.x, self.y))
def __eq__(self, other):
return (self.x, self.y) == (other.x, other.y)
def __repr__(self):
return "%s:%s" % (self.x, self.y,)
from collections import defaultdict
class Solution(object):
def maxPoints(self, points):
W = defaultdict(int)
r = 0
for p in points:
mp = MyPoint(p.x, p.y)
W[mp] += 1
r = max(r, W[mp])
P = list(W.keys())
N = len(P)
for i in range(N):
for j in range(i+1, N):
npc = W[P[i]] + W[P[j]]
for k in range(j+1, N):
if is_collinear(P[i], P[j], P[k]):
npc += W[P[k]]
r = max(r, npc)
return r
```