dynamic type checking for python method/function calls. Based on annotations (python > 3.x) or convention based for python < 3.x