Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python __lt__ __gt__カスタム(オーバーロード)演算子を実装する方法は?


Pythonには、演算子のオーバーロードされた動作を定義するための魔法のメソッドがあります。比較演算子(<、<=、>、> =、==、および!=)は、__ lt __、__ le __、__ gt __、__ ge __、__ eq__、および__ne__マジックメソッドに定義を提供することでオーバーロードできます。次のプログラムは、距離クラスのオブジェクトを比較するために<および>演算子をオーバーロードします。

class distance:
  def __init__(self, x=5,y=5):
    self.ft=x
    self.inch=y

  def __eq__(self, other):
    if self.ft==other.ft and self.inch==other.inch:
      return "both objects are equal"
    else:
      return "both objects are not equal"

  def __lt__(self, other):
    in1=self.ft*12+self.inch
    in2=other.ft*12+other.inch
    if in1<in2:
      return "first object smaller than other"
    else:
      return "first object not smaller than other"

  def __gt__(self, other):
    in1=self.ft*12+self.inch
    in2=other.ft*12+other.inch
    if in1<in2:
      return "first object greater than other"
    else:
      return "first object not greater than other"

d1=distance(5,5)
d2=distance()
print (d1>d2)
d3=distance()
d4=distance(6,10)
print (d1<d2)
d5=distance(3,11)
d6=distance()
print(d5<d6)
結果は__lt__および_gt__マジックメソッドの実装を示しています

first object not greater than other
first object not smaller than other
first object smaller than other

  1. 最新のPythonでカスタム例外を宣言する方法は?

    何かをオーバーライドしたり、例外に追加の引数を渡したりするには、最新のPythonで次のようにします。 class ValidationError(Exception): def __init__(self, message, errors): super(ValidationError, self).__init__(message) self.errors = errors そうすれば、エラーメッセージの辞書を2番目のパラメータに渡し、後で必要に応じてそのパラメータにアクセスできます。

  2. Pythonでユーザー定義の例外を実装するにはどうすればよいですか?

    Pythonで新しい例外クラスを作成することにより、ユーザー定義またはカスタムの例外を作成します。アイデアは、例外クラスからカスタム例外クラスを派生させることです。ほとんどの組み込み例外は、同じ考え方を使用して例外を強制します。 指定されたコードで、ユーザー定義の例外クラス「CustomException」を作成しました。親としてExceptionクラスを使用しています。したがって、新しいユーザー定義の例外クラスは、他の例外クラスと同じように例外を発生させます。つまり、オプションのエラーメッセージを指定して「raise」ステートメントを呼び出します。 例を見てみましょう。 この例では、ユ