What's fishy (to me) is that you have an init in the base class that creates, while all of the child classes have an init that initializes. Why not just rename the init method in the base class to "create"? Then you can use the can method on the newly blessed object to see if it has an init method (because the base class will no longer have a method named "init").