Python は関数のオーバーロードをサポートしていないため、さまざまな型を作成するときに問題が発生しますゲームの弾丸。この記事では、複数のディスパッチ 手法を使用した解決策を提供することを目的としています。
メソッドのオーバーロードにはデータ型に基づいてコンパイル時に関数を選択する必要がありますが、Python にはその機能がありません。この機能。ただし、複数のディスパッチ、つまりマルチメソッドを使用すると、複数の引数の動的な型に基づいて実行時に関数を選択できます。
multipledispatch パッケージは、Python での複数のディスパッチを有効にします。使用方法は次のとおりです:
from multipledispatch import dispatch from collections import namedtuple
カスタム データ型の定義:
Sprite = namedtuple('Sprite', ['name']) Point = namedtuple('Point', ['x', 'y']) Curve = namedtuple('Curve', ['x', 'y', 'z']) Vector = namedtuple('Vector', ['x','y','z'])
期待される引数を指定する @dispatch アノテーションを使用して複数の関数を作成タイプ:
@dispatch(Sprite, Point, Vector, int) def add_bullet(sprite, start, direction, speed): # Code ... @dispatch(Sprite, Point, Point, int, float) def add_bullet(sprite, start, headto, speed, acceleration): # Code ...
など、さまざまな
sprite = Sprite('Turtle') start = Point(1,2) direction = Vector(1,1,1) speed = 100 #km/h acceleration = 5.0 #m/s**2 curve = Curve(3, 1, 4) headto = Point(100, 100) add_bullet(sprite, start, direction, speed) add_bullet(sprite, start, headto, speed, acceleration) add_bullet(sprite, lambda sprite: sprite.x * 2) add_bullet(sprite, curve, speed)
各関数は、一致する引数の型に従って呼び出され、箇条書き作成の問題に対する解決策が提供されます。
以上が複数のディスパッチを使用すると、関数のオーバーロードを行わずに Python で複数の箇条書きタイプを作成する問題をどのように解決できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。