And all of those reasons are great reasons. The reason I do it for all my OO CPAN modules (and most of mine are OO) is that I don't want $obj->weaken() to be a possibility. Particularly if weaken() is a method in my base class.
My criteria for good software:
Does it work?
Can someone else come in, make a change, and be reasonably certain no bugs were introduced?