«Генератор» - это определенный встроенный тип, и ваш тип никогда не будет таким, независимо от того, какие методы вы реализуете или какое имя вы ему даете. Вы не можете сделать экземпляры вашего класса фактическими генераторами. (Даже через подклассы - реальный тип генератора не может быть разделен на подклассы.) Кроме того, генераторы имеют методы send
и throw
, используемые для функциональности сопрограмм , но для вашего класса не имеет смысла иметьте, и их реализация по-прежнему не заставит ваши объекты проходить inspect.isgenerator
.
inspect.isgenerator
предназначен для проверки фактического генератора, а не произвольных итераторов или объектов, имитирующих генераторы.
Еслииспользуемая сторонняя библиотека нуждается в реальном генераторе, вам нужно будет предоставить ей фактический генератор, написав и вызвав функцию генератора или написав выражение генератора.
Если стороннийбиблиотека на самом деле не нуждается ни в чем специфичном для генератора, вы можете подать проблему с просьбой переключиться на менее строгую проверку, чем inspect.isgenerator
.