私はPythonでVector3クラスを実装しようとしています。 Vector3クラスをC++やC#で記述すると、X、Y、Zのメンバーは浮動小数点数で保存されますが、Pythonではducktypingという方法があります。だから私のC++/C#の知識に従って、私はこのような何かを書いた:Pythonがisinstance()Vectorをアサートする
class Vector3:
def __init__(self, x=0.0, y=0.0, z=0.0):
assert (isinstance(x, float) or isinstance(x, int)) and (isinstance(y, float) or isinstance(y, int)) and \
(isinstance(z, float) or isinstance(z, int))
self.x = float(x)
self.y = float(y)
self.z = float(z)
質問がアサート文についてです:あなたは、このインスタンス(数学用のVector3実装)でそれらを使用するかではないでしょう。
def __add__(self, other):
assert isinstance(other, Vector3)
return Vector3(self.x + other.x, self.y + other.y, self.z + other.z)
これらのインスタンスでassertを使用しますかしないかを指定しますか? このウェブサイトによると:https://wiki.python.org/moin/UsingAssertionsEffectivelyそれは過度に使用されるべきではありませんが、静的な型指定を使っている人として私にとっては、同じデータ型をチェックするのは非常に奇妙です。
だから、また、その一例で)(でisinstanceを使用すると、ちょうどすぐに右の種類を期待していませんか? –
@StefanBユーザーは、複合型などの他の数値型を渡すことを防ぐことができます。 –