avoid hasattr