I suppose you should use `static` instead `self` to solve the "Cannot call abstract method" error...