use meta class to hide initialization