UnionFind data structure implemented in Python
find is not a right name. A method find(x) is expected to find objects matching x. find_root seems more appropriate.

I know that Sedgewick &amp; Wayne use find, and they are wrong.
find (or find_root) has no reason to be static. x.find_root() is way more natural than UnionFind.find_root(x).
Python does not eliminate tail recursion. I recommend to rewrite find as

def find(x):
    while x != x.parent:
        x = x.parent
    return x