refactored for inheritance. Methods added and removed include []=(attribute, value), []=(attribute), and save