Python学習【365日チャレンジ!】79日目のマスターU(@Udemy11)です。
以前、U-NEXTを使っていたときがあったのですが、昨日紹介したAmazonプライムビデオと同じように、ある程度見放題の映画も揃っています。
あと、U-NEXTの強み!?としては、動画配信サービスの中で唯一と言えるセクシー系の映像も扱っているんですよね。
そちらメインで利用している人も多いかもしれませんが、メッキの刃やヒロアカ、ハイキューなどの人気アニメが見放題になっているのも魅力の一つで、31日間の無料体験期間があるうえ、新規登録で600円分のポイントがもらえるので、有料の最新映画も見ることが可能です。
とりあえず動画サービスを試してみたい方にはおすすめです。
(※本ページの情報は2020年4月時点のものです。最新の配信状況は U-NEXT サイトにてご確認ください。)
ということで、今日もPython学習をはじめていきましょう!
昨日の復習
昨日は、コンストラクタとデストラクタについて学習しました。
どちらのクラスの定義の中にdef
文で記載しますが、インスタンスが作られたときに最初に実行されるのがコンスタラクタで、インスタンスを削除するときに実行されるのがデストラクタです。
デストラクタは、クラス外に直接del
で呼び出してインスタンスを削除することもできましたね。
class Animal(object):
def __init__(self, name):
self.animal_types = name
def say(self):
print('This is a {}'.format(self.animal_types))
def __del__(self):
print('Good Bye')
dog = Animal('dog')
cat = Animal('cat')
dog.say()
del dog
cat.say()
出力結果
This is a dog
Good Bye
This is a cat
Good Bye
Animal
クラスからdog
とcat
のインスタンスをつくり、say
メソッドを実行しています。
16行目のdel dog
によって、dog
インスタンスは削除されて、Good Bye
が出力されたあと、cat.say()
メソッドを実行、最後にクラス内のデストラクタによって、cat
インスタンスが削除されて再びGood Bye
が実行されています。
16行目のdel dog
がなければ、最後の行のcat.say()
が実行されたあと、Good Bye
が2回出力されることになります。
詳しくはこちらの記事をごらんください。
それでは本日の学習にはいりましょう!
クラスの継承
クラスの定義を学習した時点で、少しだけふれましたが、いよいよクラスの継承について学習します。
改めて、Pythonの公式ドキュメントの【クラス】のチュートリアルを確認しても、クラスの定義にobject
の記述がないので、特に問題がないかと思って、今回からobject
を記述しないことにします。
クラスの継承は、ベースとなるクラスのメソッドを引き継いで、さらにメソッドを加えるときに活用します。
class Suzuki:
def looks(self):
print('good looking')
class Suzuki_a(Suzuki):
pass
suzuki_a = Suzuki_a()
suzuki_a.looks()
出力結果
good looking
以前ちらっと学習しましたが、6行目のpass
は、何もしないという意味のコードです。
つまり、Suzuki_a
クラスは何もしないクラスなのですが、オブジェクトにSuzuki
クラスを指定していることで、Suzuki
クラスが持つlooks
メソッドが使えるようになります。
なので、8行目でSuzuki_a
クラスから生成したインスタンスであるsuzuki_a
はlooks
メソッドが使えるということです。
継承クラスにメソッドを追加
次に、さらにSuzuki
を継承したもう一つのクラスを作って、メソッドを追加してみます。
class Suzuki:
def looks(self):
print('good looking')
class Suzuki_a(Suzuki):
pass
class Suzuki_b(Suzuki):
def intel(self):
print('smart')
suzuki_b = Suzuki_b()
suzuki_b.looks()
suzuki_b.intel()
出力結果
good looking
smart
8〜10行目でSuzuki
を継承したSuzuki_b
を定義して、さらに、intel
メソッドを追加しました。
Suzuki_b
には、ベースクラスであるSuzuki
と自分自身のメソッドが定義されているので、13行目でgood looking
、14行目でsmart
が出力されます。
しかし、Suzuki_a
のインスタンスを作って、Suzuki_b
で定義されているintel
メソッドを使うことはできません。
継承したクラスをさらに継承
この使い方がいいのかどうかはわかりませんが、ベースクラスを継承したクラスをさらに継承してみるとどうなるか試してみました。
class Suzuki:
def looks(self):
print('good looking')
class Suzuki_b(Suzuki):
def intel(self):
print('smart')
class Suzuki_c(Suzuki_b):
pass
suzuki_c = Suzuki_c()
suzuki_c.intel()
suzuki_c.looks()
出力結果
smart
good looking
エラーが起こるかと思いましたが、普通にSuzuki
を継承したSuzuki_b
を継承したSuzuki_c
から生成したインスタンスsuzuki_c
で、2つのメソッドを実行することができました。
この使い方がはたして必要かどうかは別として、できるということがわかりましたね。
好奇心は大切
まず、最後に試したようなベースクラスを継承したクラスをさら継承したクラスなんてものを作ってみようと思う人はあまりいないのではないでしょうか?
酒井さんの講座の中では紹介されていませんし、これまで使用してきたベースクラスであるというobject
の記述にしても、書くのが暗黙のルールと紹介されていたので、普通の人なら、object
を記述するんだと思います。
Pythonを使えるようになるということは、教科書どおりのことだけでなく、自由な発想をもって、プログラムを組み立てられるようになるということなので、教科書どおりのことをやっていても、Pythonをマスターしたことにはなりません。
とうぜん、きちんとしたルールにしたがってコードを記述する必要がありますが、
- こうすればどうなるんだろう?
- これはできるんだろうか?
- それってほんと?
という疑問や好奇心を持ったのなら、まずは試してみることが大切です。
いろいろ試して、いろいろと失敗して、いろいろなことを学んでいけるわけですから。
それでは今日はこのへんで。
明日も元気にGood Python!