Create a base class that defined __get_attribute__ as I've done above, which then calls attribute_missing() if the attribute isn't there. To differentiate between a method and a member request, you can use the behavior that __getattr__ is called for members only, while __get_attribute__ is called for both members and methods.