Нет смысла наследовать от object.
Так компактнее для тривиальных функций:
@property def encoding(self): return self.__encoding
Генератор выгоднее со всех точек зрения:
def __normalized_params(params): if isinstance(params, dict): for k, v in params.items(): if isinstance(v, (list,tuple)): yield from ( (k, _) for _ in v ) else: yield k, v else: yield from params