この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。
前回は、特殊メソッドについて学びました。インスタンスの生成、破棄の動きがわかったと思います。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/H/HiroCom777/20240613/20240613151631.jpg)
今回も特殊メソッドです。型変換について見ていきましょう。
データ型の変換
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)) # '偶数が設定されました'を返す
引数に設定された数値によって、返ってくる文字列が変わります。
次回も特殊メソッド(オブジェクトの比較)
いかがでしょうか。オブジェクトの型変変換処理は、こうやって設定できるんですね。次回も特殊メソッドです。オブジェクトの値比較時の処理について見ていきましょう。お楽しみに!!