PythonでFunctoolsモジュールのtotal_ordering()を使用する。

PythonでFunctoolsモジュールのtotal_ordering()を使用してみます。Functoolsモジュールは、高階関数、関数に影響を及ぼしたり他の関数を返すことができるものです。このモジュールのtotal_ordering()を用いることで、与えられたクラスが条件を満たす場合に、与えられたクラスの比較順序付けメソッドを用いることができます。これは、オブジェクト指向プログラミングの時間を大幅に節約します。

なお、与えられたクラスは、 __lt__(), __le__(), __gt__(), __ge__() メソッドのいずれか1つを定義しなければなりません。また、与えられたクラスは、__eq__() メソッドを定義する必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■Functoolsモジュールのtotal_ordering()を使用する

では、早速Functoolsモジュールのtotal_ordering()を使用してみます。

■コード

from functools import total_ordering

@total_ordering
class Test:
    def __init__(self,t_1):
        self.t_1 = t_1
    
    def __gt__(self,other):
        return self.t_1 > other.t_1

    def __eq__(self,other):
        return self.t_1 == other.t_1

test_1 = Test(6)
test_2 = Test(1)

print(test_1.__gt__(test_2))
print(test_1.__eq__(test_2))

「from import」でfunctoolsモジュールのtotal_orderingを呼び出します。その後、classを用いてTestというclassを定義します。class内には、今回はdef文を用いて__init__,__gt__,__eq__という関数を定義します。

__gt__と、__eq__の関数に関しては、比較演算子である”>”記号と”==”記号を用いた比較の結果をreturnで返します。

その後、Testクラスのインスタンスを生成します。test_1と、test_2。

生成後、test_1の__gt__()を用いて、test_2のTest()の引数,パラメータとして渡した値を比較し、結果をprint()関数で出力します。またtest_1の__eq__()を用いて、test_2のTest()の引数,パラメータとして渡した値も比較し、こちらもprint()関数で出力します。

■実行・検証

このスクリプトを「fun_t_o.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、今回定義したclassの比較順序付けメソッドを呼び出して使用することができ、比較結果をprint()関数で出力させることができました。

コメント

タイトルとURLをコピーしました