I think (tests keep passing) the special case when self is root, and one of the appends can be avoided with a small change in the loop:
```
result = []
curr = self
while not curr.is_root():
    result.append(curr.Parent)
    curr = curr.Parent

return result
```