Published Date : 2020年4月6日13:41

Python : ブーリアン型変数を文字列型変数にキャストする
Python : Cast a Boolean variable to type String


This blog has an English translation


YouTubeにアップした動画、「【Python】Part 2 - 一分間の3Dアニメーションで理解するPythonの基礎」の補足説明の記事です。

Here's a little more about the "【Python】Part 2 - Understand the basics of Python with a one-minute 3D animation" video I uploaded to YouTube.

ブーリアン型(TrueかFalseが入っている)変数を文字として表示したい場合があるとします。

Suppose you want to display Boolean (Contains True or False) variables as characters.

>>> bool_value = True
>>> print(bool_value)
True

通常通りprint()関数を用いて「print(ブーリアン変数)」で表示されますが、文字列のオブジェクトと連結させて表示させたい場合はどうでしょう。

It is displayed as "print(Boolean variable)" using the print() function as usual, but what if you want it to be concatenated with a string object?

>>> bool_value = True
>>> print("I'm a Python beginner = " + bool_value)
TypeError: can only concatenate str (not "bool") to str

結論、ブーリアン変数にstr()メソッドを使いましょう。

I'll come to the conclusion. All you have to do is use the str() method on a Boolean variable.

>>> 日本語 = True

>>> print("'日本語'という変数には" + 日本語 + "が入っています。")
TypeError: can only concatenate str (not "bool") to str

>>> print("'日本語'という変数には" + str(日本語) + "が入っています。")
'日本語'という変数にはTrueが入っています。
>>> japanese = True

>>> print("The value stored in variable 'japanese' is "+ japanese + " .")
TypeError: can only concatenate str (not "bool") to str

>>> print("The value stored in variable 'japanese' is "+ str(japanese) + " .")
The value stored in variable 'japanese' is True


何故TypeErrorが発生したのか?
Why did TypeError occur?



なぜこのTypeErrorが起こったのかを動画では分かりやすく伝えるため変数を入れる箱の形と大きさの違いで表現しました。

In the video, I used the difference in shape and size of the box containing the variable to explain why this TypeError occured.

実際のところはどうかというと、まず説明すべきはPythonの変数は全てオブジェクトだということです。

In fact, the first thing to explain is that all Python variables are objects.

そしてオブジェクトはクラスから作られます。

And objects are created from classes.

さらにクラスから作られたオブジェクトはメソッドや属性値(プロパティ)が存在します。

Furthermore, objects created from classes have methods and attribute values (Properties).

”文字列”として表示するためには、このオブジェクトに__str__等の特殊メソッドが実装されている必要があります。

Special methods, such as __str__, must be implemented to display the object as "String".

そして、この__str__特殊メソッドが実装されていれば、print()関数やstr()関数で__str__を自動的に呼び出してくれます。

And if this __str__() special method is implemented, the print() and str() functions will call __str__() automatically.

スクリプトで実際の働きを見てみましょう。

Try it out by writing a simple script.

>>> test = True
>>> print(test)
True

>>> class Test1:
...    def __init__(self, bool_value):
...        self.value = bool_value
...    def __str__(self):
...        return f"{self.value}"

>>> test1 = Test1(True)
>>> print(test1)
True

>>> class Test2:
...    def __init__(self, bool_value):
...        self.value = bool_value

>>> test2 = Test2(True)
>>> print(test2)
<__main__.Test2 object at 0x01B030C0>

では、文字列の足し算をしようとするとどうなるでしょうか?

So what happens when you try to add strings?

print("This object (" + test1 + ") has an __str__ method")
TypeError: can only concatenate str (not "Test1") to str

print()関数を使ったのに、エラーが起こったのは、print()関数が働くより前に、その中身で型エラーが起こってしまったからです。

The reason for the error, despite using the print() function, is that the contents of the print() function had a type error before it worked.

じゃあ、__str__メソッドを呼び出してから、再度試してみましょう。

Now call the __str__ method and try again.

print("This object (" + test1.__str__() + ") has an __str__ method")
This object (True) has an __str__ method

これと同じことができるのがstr()関数です

The str() function does the same thing.

print("This object (" + str(test1) + ") has an __str__ method")
This object (True) has an __str__ method

オブジェクトに__str__メソッドが実装されていないと以下のようになります。

If the object does not implement the __str__ method, it behaves as follows.

test2.value
True

str(test2)
'<__main__.Test2 object at 0x01B030C0>'

print("This object (" + str(test2) + ") has not an __str__ method")
This object (<__main__.Test2 object at 0x01B030C0>) has not an __str__ method




See You Next Page!