Как мне аннотировать возвращаемый тип метода, который может возвращать несколько различных типов объектов?
В частности, это метод, с которым у меня проблемы:
def _bin_factory(self) -> Any:
"""
Returns a bin with the specificed algorithm,
heuristic, and dimensions
"""
if self.algorithm == 'guillotine':
return guillotine.Guillotine(self.bin_width, self.bin_height, self.rotation,
self.rectangle_merge, self.split_heuristic)
elif self.algorithm == 'shelf':
return shelf.Sheet(self.bin_width, self.bin_height, self.rotation, self.wastemap)
elif self.algorithm == 'maximal_rectangle':
return maximal_rectangles.MaximalRectangle(self.bin_width, self.bin_height, self.rotation)
raise ValueError('Error: No such Algorithm')
Я пробовал Union[shelf.Sheet, guillotine.Guillotine, maximal_rectangles.MaximalRectangle]
, но MyPy дает мне массу ошибок, когда я позже использую метод _bin_factory в своем коде. Ошибки, похоже, связаны с тем фактом, что все три типа объектов в Союзе имеют разные атрибуты друг от друга.
bin()
. Затем измените свой_bin_factory()
метод, чтобы он возвращал объекты типаBin
. Таким образом, независимо от вашей стратегии биннинга, вызывающий может просто вызвать методbin()
и рассматривать возвращаемый тип как один и тот же тип. - person Michael0x2a   schedule 06.11.2017