You can also just have modifiable classes like many dynamic languages have. That lets you do extension methods and a lot of other metaprogramming type things.