The problem is that it's not actually predictable. It only *seems* predictable. But you could create a reference cycle pointing to your object, and all of a sudden, whoops, doesn't get destructed when you thought it was going to anymore.
There's a reason that Python introduced the "with" statement: to allow for easily-written *actually* predictable resource closing.