python研修を終えたので、その備忘録としてメモ書きをしていきたい。
前回の①に続く形となります。
混乱しやすいところを中心に書きます。
誤りなどがあれば指摘いただければと思います
#エラーと例外処理
my_list = [1,2,3]
my_list[4]
print("hello")
-----
IndexError Traceback (most recent call last)
<ipython-input-3-edac7686cc0b> in <module>()
1 my_list = [1,2,3]
----> 2 my_list[4]
3
4 print("hello")
IndexError: list index out of range
my_list = [1,2,3]
try:
my_list[4]
except:
print("error")
print("hello")
----
error
hello
try~exceptを使用することで'error.py'ではエラーが返されたが、2つ目ではエラーが帰ってこず最後の"hello"が出力されていることが確認できる。エラー部分はexceptで処理が行われており、"error"が出力されている。
try:
実行したい処理
except:
エラー時の処理
以下でエラー処理の例をもう1つ挙げておく。
try:
r = 4/0
print(r)
except ZeroDivisionError as err:
print("error: ", err)
else:
print("there's no error")
finally:
print("all are done")
print("hello")
----
error: division by zero
all are done
hello
上記のコードをみると4/0のため"0で割ることができない"というエラーが返ってくるはずである。そのためexceptではこのエラーが返ってきた時、エラーを出力するようにしている。もしエラーが返ってこなければelse文以下が出力される。最後のfinallyはエラーが起きても起こらなくても出力がなされる。
#クラス
クラスが自分(プログラミング初学者)にとって最も理解しづらかったところであった。自分は"同じものを何回も使い回すことができる便利なもの"と解釈している。
簡単な例を以下に示す。
class food():
def __init__(self, menu):
self.menu = menu
mesi = food("rise")
main = food("meet")
drink = food("milk")
print(mesi.menu)
print(main.menu)
print(drink.menu)
----
rise
milk
meet
class greeting():
def say_hello(self):
print("hello")
Hi = greeting()
Hi.say_hello()
----
hello
def()内にある引数selfは慣習的なものらしい。ないとダメなようなので記載している。またclass.pyからわかるように「.」をつけることで、その内容にアクセスすることができる。また"__init __”は初期化メソッドであり必ず実行されるものである。
class Car():
def __init__(self, model ="None"): #modelの初期名はなし
self.model = model
def run(self):
print("run")
class Toyota(Car):
def run(self):
print("fast")
class Tesla(Car): #Teslaの時のみmodelを先に宣言する
def __init__(self, model="model S"):
self.model = model
def run(self):
print("super fast")
def auto_run(self):
print("auto_run")
car = Car()
car.run()
print("----------")
toyota_car = Toyota("Lexus")
print(toyota_car.model)
toyota_car.run()
print("----------")
tesla_car = Tesla()
print(tesla_car.model)
tesla_car.run()
tesla_car.auto_run()
----
run
----------
Lexus
fast
----------
model S
super fast
auto_run
長々となってしまったが、ToyotaおよびTeslaの括弧の中のCarについて注目したい。各々はCarの特徴を受け取っており(今回であればmodel)、Toyota内でmodelの定義をしなくても、Carの特徴を引き継いでいることがわかると思う。
クラスに関して言えば自分の中で言語化できていないぶん、まだ理解しているとは言い難いのだとわかった。
研修におけるpythonの文法で気をつけなければいけないと思ったことは以上である。
最後までお付き合いいただきありがとうございました。