特殊メソッド_2(Python_25)

この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。

hirocom777.hatenadiary.org

前回は、特殊メソッドについて学びました。インスタンスの生成、破棄の動きがわかったと思います。

今回も特殊メソッドです。型変換について見ていきましょう。

データ型の変換

Pythonのオブジェクトには、オブジェクトID、データ型、値を持つことは前述しました。そして、指定したオブジェクトを別のデータ型に変換して、新しくオブジェクトを作る関数があります。bool関数は指定したオブジェクトからブール型のオブジェクトを作成する関数です。以下のスクリプトを実行してみましょう。

print(bool(0)) # Falseを返す
print(bool(1)) # Trueを返す
print(bool('')) # Falseを返す
print(bool('ABC')) # Trueを返す

整数型、文字列型のオブジェクトから、bool型のオブジェクトを作成できました。元のオブジェクトが整数型の場合、bool関数は0だとFalse、0以外だとTrueを返します。文字列型の場合は空文字だとFalse、空文字以外だとTrueを返します。

データ型変換処理の設定

それでは、新しく作成したクラスのオブジェクトはbool関数で型変換すると、どんなオブジェクトを返すのでしょうか。以下のスクリプトを実行してみましょう。

class ClassTest_1:
    pass

c1 = ClassTest_1()
print(bool(c1)) # Trueを返す

空のクラスからできたオブジェクトは、Trueを返しました。特殊メソッドを使用すると、bool関数を実行した結果を変更できます。記述方法は以下の通りです。

    def __bool__(self):
        #処理
        return 値 

returnで返す値を指定します。もっとも、bool関数はTrue/Falseしか返せないので、設定できる値もこの2つです。それでは上のクラスをFalseを返すように修正してみましょう。

class ClassTest_2:

    def __bool__(self):
        # print('__bool__が実行されました')
        return False

c1 = ClassTest_2()
print(bool(c1)) # Falseを返す

これで、Falseを返すようになりました。return文の前に処理を書くこともできます。

class ClassTest_3:
    def __init__(self , data):
        self.val = data

    def __bool__(self):
        # print('__bool__が実行されました')
        if 3 < self.val:
            ans = True
        else:
            ans = False
        return ans 

c1 = ClassTest_3(1)
print(bool(c1)) # Falseを返す
c2 = ClassTest_3(5)
print(bool(c2)) # Trueを返す

インスタンス生成時の引数が3より大きい場合にTrueを返すように設定できました。

その他のデータ型

その他のデータ型にも特殊メソッドを持つものがあります。代表的なものを以下に示します。

特殊メソッド 対応する関数 機能
float(self) float関数 float型に変換
int(self) int関数 int型に変換
str(self) str関数 文字列型に変換

使用方法はbool(self)と同じです。

    def 特殊メソッド:
        #処理
        return 値 

returnで返す値は、それぞれのデータ型しか設定できません。以下は文字型を返す特殊メソッドの例です。

class ClassTest_4:
    def __init__(self , data):
        self.val = data

    def __str__(self):
        # print('__str__が実行されました')
        if self.val % 2:
            return '奇数が設定されました'
        else:
            return '偶数が設定されました'

c1 = ClassTest_4(1)
print(str(c1)) # '奇数が設定されました'を返す
c2 = ClassTest_4(4)
print(str(c2)) # '偶数が設定されました'を返す

引数に設定された数値によって、返ってくる文字列が変わります。

次回も特殊メソッド(オブジェクトの比較)

いかがでしょうか。オブジェクトの型変変換処理は、こうやって設定できるんですね。次回も特殊メソッドです。オブジェクトの値比較時の処理について見ていきましょう。お楽しみに!!

hirocom777.hatenadiary.org

Python再学習のまとめはこちら!!