1
複数の異なるタイプのオブジェクトを返すことができるメソッドの戻り値の型には、どのように注釈を付ける必要がありますか?Python/MyPy:いくつかの異なるタイプのオブジェクトのいずれかを返すメソッドに注釈を付けるにはどうすればいいですか?
具体的に、これは私がとのトラブルを抱えている方法である:
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メソッドを使用して、エラーのトンを提供します。このエラーは、連合の3つのオブジェクトタイプがそれぞれ互いに異なる属性を持つという事実を中心にしているようです。
ひとつのアイデアは、それぞれを変更することですそれらは 'bin()'メソッドを含む "Bin"クラスをサブクラス化します。次に、 '_bin_factory()'メソッドを変更して、 'Bin'型のオブジェクトを返します。こうすれば、ビニング戦略に関係なく、呼び出し側は 'bin()'メソッドを呼び出し、返された型をすべて同じ種類のものとして扱うことができます。 – Michael0x2a