Python学習【365日チャレンジ!】88日目のマスターU(@Udemy11)です。
ちょっと遠出してウォーキングでラムーまで散歩に行ったら、チャーシューを作るのにめちゃくちゃ良さげな豚ロースと大きくて葉がしっかりと詰まったキャベツがあったので、思わず買ってしまいました。
両手に買い物袋をぶら下げつつ早足気味のウォーキングで帰ったのですが、ちょっと距離があったので、両手が筋肉痛になってしまいました。
明日は、チャーシュー作りに精を出そうと思います。
それではさっそくPython学習をはじめましょう!
昨日の復習
昨日は、クラスメソッドとあまり使うことのないスタティックメソッドを学習しました。
クラスメソッドは、クラスからオブジェクト(インスタンス)を生成しなくても使えるメソッドで、スタティックメソッドも同様に、オブジェクトを生成しなくても使うことのできるメソッドでした。
class Animals:
kind = 'cat'
@classmethod
def what_is_this(cls):
return cls.kind
@staticmethod
def about(country):
print('about animal {}'.format(country))
Animals.about('Japan')
print(Animals.what_is_this())
出力結果
about animal Japan
cat
スタティックメソッドの場合は、クラス内に置かなくても、クラスの外に@staticmethod
をつけずに記述すれば、普通にメソッドとして扱うことができるので、あまり使うことがないということでしたね。
より詳しい内容は、昨日の記事で確認してみてください。
それでは本日の学習をすすめましょう!
特殊メソッド
特殊メソッドは__(アンダーバー2つ)
で囲まれたメソッドのことで、これまでに学習した__init__
が代表的な特殊メソッドです。
__init__
は、オブジェクトを生成した際に、最初に読み込まれて、オブジェクトを初期化するメソッドです。
このように、クラスから生成されるオブジェクトに何らかの処理を呼び出したときに自動的に実行されるメソッドが特殊メソッドです。
class People:
def __init__(self, name):
self.name = name
例えば、このコードは、引数name
をクラス変数name
に代入するという初期化をしています。
ここまで学習してきた方なら、もうおなじみのメソッドですね。
そんな特殊メソッドの中でも代表的なよく使うメソッドを紹介していきます。
__str__
__str__
が最もよく使う特殊メソッドで、オブジェクトを生成して、print()
関数が使われるときに呼び出されるメソッドです。
class Animal:
def __init__(self, name):
self.name = name
def __str__(self):
return 'bow bow this is {}'.format(self.name)
dog = Animal('dog')
print(dog)
出力結果
bow bow this is dog
生成したオブジェクトdog
を出力すると__str__
が呼び出されて戻り値が自動的に返されています。
str()
関数、format()
関数を実行したときにも自動的に__str__
が呼び出されるようです。
__len__
__len__
は、長さを求める組み込み関数len()
を呼び出したときに実行される特殊メソッドです。
class Animal:
def __init__(self, name):
self.name = name
def __len__(self):
return len(self.name)
c = Animal('cat')
print(len(c))
出力結果
3
Animal
クラスからcat
を引数にしたc
オブジェクトを生成して、そのc
の長さを出力しているわけですが、len()
を呼び出したことで、__len__
メソッドが実行されて、引数cat
の長さが返されています。
__add__
__add__
はオブジェクトを2つ生成して、その2つを足し合わせるといった使い方ができます。
class Animal:
def __init__(self, name):
self.name = name
def __add__(self, other):
return self.name + ':' + other.name
c = Animal('cat')
d = Animal('dog')
print(c + d)
出力結果
cat:dog
Animal
クラスから生成されたオブジェクトc
の引数cat
とオブジェクトd
の引数dogを:(コロン)
を挟んで+
でくっつけています。
引数が数字の場合は、次のように少しコードを変更すれば、普通に足し算をした結果が出力されます。
class Num:
def __init__(self, num1):
self.num = num1
def __add__(self, num2):
return self.num + num2.num
c = Num(10)
d = Num(100)
print(c + d)
出力結果
110
__eq__
__eq__
は同じクラスから生成されたオブジェクトのクラス変数が同じかどうかを判断するときに使われるので、==
がオブジェクトで呼び出されたときに実行され、True
かFalse
を返してくれます。
class Animal:
def __init__(self, name):
self.name = name
def __eq__(self, other):
return self.name == other.name
c = Animal('cat')
d = Animal('cat')
print(c == d)
出力結果
True
もちろん、9行目のcat
をdog
に変更すれば、出力結果はFalse
になります。
その他の特殊メソッド
その他の特殊メソッドで演算子に関する処理を呼び出したときに実行されるメソッドがこちら。
__sub__(self,オブジェクト)
:引き算(-)を行うときに実行されるメソッド__mul__(self,オブジェクト)
:掛け算(*)を行うときに実行されるメソッド__truediv__(self,オブジェクト)
:割り算(/)を行うときに実行されるメソッド__and__(self,オブジェクト)
:AND条件(&)を使うときに実行されるメソッド__or__(self,オブジェクト)
:OR条件(|)を使うときに実行されるメソッド__ne__(self,オブジェクト)
:含まれない条件(!=)を使うときに実行されるメソッド__lt__(self,オブジェクト)
:小なり条件(<)を使うときに実行されるメソッド__gt__(self,オブジェクト)
:大なり条件(>)を使うときに実行されるメソッド
型の変換に関する関数を実行するときに使われるメソッドがこちら。
__int__(self)
:int関数を使うときに実行されるメソッド__float__(self)
:float関数を使うときに実行されるメソッド
複数の値を持つ型の処理を実行するときに使われるメソッドがこちら。
__len__(self)
:len関数を呼び出したときに実行されるメソッド__getitem__(self,key)
:値を参照するときに実行されるメソッド__setitem__(self,key)
:引数のkeyに要素を代入するときに実行されるメソッド__delitem__(self,key)
:del文が呼び出されたときに実行されるメソッド__iter__(self)
:iter関数を呼び出したときに実行されるメソッド__conteins__(self)
:比較演算子のinが使われたときに実行されるメソッド
これら以外の特殊メソッドもありますが、最も使用頻度の高い特殊メソッドは__init__
で、次に来るのは__str__
じゃないかということでしたので、その他の特殊メソッドは、そんなに真剣に覚えておかなくても問題はないのかなと思います。
オブジェクトとクラスが終了
今日まででようやくオブジェクトとクラスのチャプターが終了しました。
長かったような短かったような、どちらとも言えない感じですが、すでに最初の頃に学習した内容は、頭から抜け落ちてしまっているものもたくさんあると思います。
かなり時間をかけて学習してきたつもりですが、それでも学習した内容を完璧に覚えているものは数えるくらいしかありません。
実践はまだ少し先のようですので、しっかりと復習しつつ、明日以降のファイル操作とシステムについて学習を進めていこうと思います。
それでは、明日もGood Python!