Python学習【365日チャレンジ!】78日目のマスターU(@Udemy11)です。
AppleTVのサブスクリプションに登録したのですが、みられる映画がほとんどなくてがっかりしています。
見放題という認識をしていたのでAppleTVで提供されている映画は全て見放題だと思っていたのですが、オリジナルの動画のみが見放題になるとのことです。
Amazonプライムのプライムビデオなら、追加料金が必要な映画はあるものの、過去の作品はかなり見放題なので、AppleTVよりAmazonプライムビデオのほうがおすすめです。
映画が好きなので、かなりみている方ですが、興味をひかれる映画があったらついついみちゃうんですよね。
Python学習のあと、記事を書いて、時間があればおもしろそうな映画を探すのですが、ついつい寝不足になってしまいます。
それでは、今日もPython学習頑張りましょう!
昨日の復習
昨日は、クラスの初期化とクラスの変数について学習しました。
クラスの初期化については、最初に読み込まれるメソッドである__init__
で指定しました。
また、メソッドの引数には必ずself
を指定しなければいけないので、第一引数は、self
に続けて記述します。
また、クラス内のメソッドは、クラス内の他のメソッドで使い回すことが可能でしたね。
class Person(object):
def __init__(self, name):
self.name = name
def say_word(self):
print('I am {}, Hi'.format(self.name))
self.add_num(2, 4)
def add_num(self, i, j):
print(i * j)
person = Person('Jack')
person.say_word()
出力結果
I am Jack, Hi
8
__init__
でクラスに名前を指定して、2つのメソッドsay_word
とadd_num
を定義しています。
say_word
の中にはself.add_num(2, 4)
というクラス内のメソッドを使っています。
実際、こんな使い方ができますよという理解はしたものの、具体的な使い方がまだわかっていないので、実践していく中で慣れていくしかありませんね。
詳しくは、昨日の記事を参考にしてください。
それでは、本日の学習にはいりましょう!
コンストラクタとは
実はすでにコンストラクタを学習しています。
コンストラクタは、クラスのインスタンスを作ったときに最初にする初期化処理のことで、__init__
の定義のことで、すでに学習していますが、def __init__(self):
で定義します。
class Animal(object):
def __init__(self, name, cry):
self.animal_types = name
self.cry = cry
def say(self):
print('The {} says {}'.format(self.animal_types, self.cry))
dog = Animal('Dog', 'Bow-Wow')
cat = Animal('Cat', 'Meow-Meow')
dog.say()
cat.say()
出力結果
The Dog says Bow-Wow
The Cat says Meow-Meow
このコードの場合、Animal
クラスの種類と鳴き声の2つの引数を定義してコンストラクタを作成しています。
クラスのメソッドはsay
だけですが、9行目、10行目でdog
とcat
というクラスのインスタンスを作成しています。
ちなみに、【インスタンス】という言葉がはじめて登場しましたが、わかりやすく説明すると、こんな感じ。
- クラス : 設計図
- インスタンス : 設計図を元に作られた実物
クラスが設計図で実体がないのに対して、インスタンスは作られた実物で具体的に動かすことができるものと理解するとわかりやすいでしょう。
上記のコードで考えると、Animal
という設計図に、具体的な種類と鳴き声を与えてできたものがdog
とcat
という実体になります。
これまでの学習でもPerson
という設計図を元に、person
という実物を作っていたわけですね。
一つのクラスから2つのインスタンスを作っていますが、say
というメソッドは一つで、それぞれのインスタンスから引数を受け取っているので、同じメソッドを使っても結果は違うものになっています。
デストラクタとは
デストラクタは、コンストラクタとは逆で、作ったインスタンスが使われなくなったときにする処理の定義です。
class Animal(object):
def __init__(self, name, cry):
self.animal_types = name
self.cry = cry
def say(self):
print('The {} says {}'.format(self.animal_types, self.cry))
def __del__(self):
print('finish')
cow = Animal('Cow', 'Moo-Moo')
cow.say()
出力結果
The Cow says Moo-Moo
finish
このコードでは、Animal
クラスを元に、cow
というインスタンスを作成していますが、cow.say()
が実行されたあと、コードの記述がないため、この時点で、デストラクタ__del__(self)
で定義した処理が実行され、cow
インスタンスは削除されます
ちなみに14行目のcow.say()
のあとに、print('still continue')
を付け加えると出力結果は次のようになります。
The Cow says Moo-Moo
still continue
finish
つまり、実行ファイルが閉じる際に行う処理を定義するのがデストラクタということです。
del文と同じ
クラスの中に記述するデストラクタですが、del
文を使って呼び出すことができます。
class Animal(object):
def __init__(self, name):
self.name = name
def say(self):
print('Animal type is :', self.name)
def __del__(self):
print('finish')
cow = Animal('Cow')
cow.say()
del cow
print('still continue')
出力結果
Animal type is : Cow
finish
still continue
del cow
によって、インスタンスが削除されるので、デストラクタで定義したfinish
が先に出力されてから最後のstill continue
が出力されます。
さらに最後の行に、cow.say()
を加えたとしても、すでにcow
が削除されているので、NameError
が起こります。
一つ一つコツコツと
一気に難しいことをやってもなかなか理解することはできないので、設計図のパーツ一つ一つをきちんと理解していくことが大切です。
アリが巨大な巣を作り上げるように、慌てずコツコツと積み上げてしっかりとした土台を作っていきましょう。
それでは明日もGood Python!