Java -> Python 初めからクラスの継承まで[プログラミング]
本記事ではプログラミングをやったことのある人が(特にJava)Pythonをやるために、Javaとの書き方の違いから、コマンド仕様の共通点・相違点をクラスの継承までまとめたものとなります。
個人的には簡単な関数を忘れたとき用です(笑
是非ご自身の勉強の参考にしていただければと思います。
(例として出す変数名等に特に意味はございません笑
===
まず第一にJavaではクラスを宣言したりという工程が必要になりますが、Pythonではいきなり書き始めることができます。
また改行に;を打ったりという事も不要です。
コメントアウトは先頭に「#」です。
それとは別に """で文字列を囲むことでもできます。こちらは複数行に渡っていても対応できます。
===
Pythonにおいて出力は
print()
数字はそのまま()の中に入れればいいです。
文字列の場合は""で囲むのもおなじみですね。
足し算は+引き算は-、掛け算*、割り算/
割ったあまりを出したいときは%。//で割った商。このあたりもだいたい同じですね。
ただ**で累乗ですね。
今までのことを簡単にまとめるとこう↓
これで実行すれば「hello world!」と「3」が出力されます。
===
変数に代入したいときは型の宣言等がいらなく、
変数名=数値
変数名="文字列"
で可能です。もちろんこれは浮動小数であってもです。
そして、もちろん変数同士の計算も可能です。
これに関しては、整数型と少数型が混ざっていても計算してくれます。
変数の出力は
print(変数名)
ここまでは↓
実行すると「2」「Python」「3.2」と出ます。
===
変数は一度入れたとしても新たに式を書けば上書きできます。
というプログラムなら出力されるのは「200」です。
===
Java同様、記号+は文字列も結合可能です。
なら出力は「アップル」。
===
先ほど型を宣言しなくていいといいましたが、Pythonが勝手にやってくれているという事で型という概念自体は存在します。
それは、数字ならIntやfloat、文字ならStr。
つまり、数字を先ほどのように文字列と一緒に出力したい場合は型を文字列型として出力する必要があります。
これならば「私は5歳です」となります。
ちなみに、formatメソッドにより、文字列中で{}で枠を作り、文字列の後にピリオドを打ってからformat()で変数を指定すると、枠内が指定した変数になるというものもあります。これは、複数あるときはformat内でカンマで区切れば大丈夫です。
これは、「:.3f」とすることで、小数点第3位まで表示のように小数点以下の表示方法に関して指定することもできます。(同様なことをprintでやるには:の代わりに%です。
===
入力はinput()。
デフォルトで文字列型として読み込まれるので、 数値とする場合は読み込んだ後に変換されます。
()の中文字列を入れると、それが表示されてからinputを受け付けます。
この場合は「cの値は?」と表示され、そこで10と入れた場合「20」と出力されます。
===
条件分岐はif文があります。
比較演算子は基本同じで、<,>,<=,>=、そして==で同じ、!=で異なり、条件式が複数の場合の「かつ」が「and」、「または」が「or」 。「not」で否定を。
elseやelse if も機能は同じ。ただelse ifはelifと書きます。
これなら「x,yは共に3以下である」と出力されますね。
この際ifに対してprintがインデントされていますが、pythonは改行等を簡略化している分インデントによって判断されることが多いので、インデントには注意する必要があります。
swichは存在しないです。同じような運用については色々あるので、各自調べて見てください。そもそもifでも表現しようと思えばできますからね。
===
Pythonでは配列に似たものとしてリストというものを用います。
リスト名=[要素1,要素2,要素3]
で作ることができます。
リストの特徴としては要素数が可変である事があげられますね。
リスト名.append("要素4")
で要素を追加できます。(消去はdel リスト名[番号]でインデックスを、remove(要素名)で要素を消去できます。
もちろん
リスト名[2] = 要素5
のように要素を変更する事もできます。
リストの長さはlen関数で確認できます。
リスト全体を出力するには
print(リスト名)
ここまでが↓
これは「ひらがなの一番目はあ」「['あ', 'い', 'う', 'え']」と出力されます。
また、inを用いることで、要素が含まれているかを調べられます。
数値型のみの場合はきちんと数値型として読み込まれます。
ちなみに、番号は0,1,2,,, と順になっていますが、-1,-2,-3,,,とすることで反対から順に読み込むこともできます。
複数同時に読み込むスラッシングというものがありますが、これは切り取りたい範囲をスラッシュを入れるように指定するもので、スラッシュは数字の前につきます。つまり、1~3をとりたいときは[1:4]です。
似たものとしてタプル型がありますが、リスト型がミュータブル(可変可能)に対して、これはイミュータブル(不可変)で、むやみに書き換えして欲しくないものに使います。これは[]の代わりに()で括ります。
===
リストはもう一つ特徴があり、それがfor文との接続性です。
for文の書き方として
for 変数名 in リスト名:
とすると、リストの要素を一つずつ変数名として指定したところに代入して実行してくれます。
これだと「ひらがな:あ」「ひらがな:い」「ひらがな:う」「ひらがな:え」と出力されます。
そして、見たように数字を用いたいときはrange関数を用いればできます。(後ろの()内の数字の数だけ数字が作成される。スラッシュは間に「,」をつければ良い。さらに次に数字を重ねると範囲内でその数おきに数字を選択できます。
zip関数を用いると複数のイテレータから同時に要素を取り出せます。
enumerate関数は数字を同時に読み込んでくれるため、rangeとzipを組み合わせる必要がなく、楽です。
===
リストに似たものとして辞書型というものもあります。
これはリストや配列がインデックス番号で要素を取り出すのに対し、特定の文字列などキーというものを決めて、それで呼び出すというものです。
辞書名 = {キー1:要素1,キー2:要素2}
で設定でき、使うときは先にもいった通り
辞書名[キー1]
で要素1が取り出せます。
要素の変更はリスト同様、要素の追加は
辞書名[キー3] = 要素3
で追加できます。
またfor文で用いることができるが、リストと違い変数に入るのはキーの方なのでそこは注意ですね。
これなら、「日本」「首都:東京」「首都:北京」「首都:ソウル」となります。
似たものとして、集合型というものがあります。これは同様にくくって要素を入れますが、キーとバリューいう風にすることはなく、要素の順番や重複を考えずに管理するものです。
===
繰り返し処理としてリストに関係のあるfor文を例に出してきましたが、Pythonにはwhile文も存在します。
書き方はif文と同じように
while 条件式:
でインデント内が実行範囲となります。
もちろん繰り返し処理においてbreak、continueは用いれます(for文でも
===
関数の設定は
def 関数名():
でインデント内が関数の定義になります。
()内に引数を設定できるのも変わらず。もちろん型の指定はいらないですね。
引数を複数入れる場合は「,」で区切ります。
以下のように関数の宣言時に引数の初期値を設定できます。
def 関数名(引数名 = "初期値"):
これは「ゲストさん、こんにちは。今日は12月25日です」となります。
戻り値の処理も
return 変数
で可能です。ただし、return以降は実行されないので注意が必要です。
ちなみにこれは位置引数で 、キーワード引数を設定することもできます。この場合引数のところに式を入れることで、デフォルトではその値を、式を引数として選択することでその値を使用することができます。
可変長引数(個数を指定しない位置引数。タプルに格納して受け取る)は最初に「*」をつけることで作れます。
===
コードが見辛づらくなることを解消するためにモジュールという概念があります。
これはメソッドなど一部のコードを他のファイルに移して、それを読み込んで使うというものです。
他のファイルに移したら、
import ファイル名
ファイル名.メソッド名()
でそのメソッドを用いれます。
クラスとの違いは継承ができない点です。つまり、インスタンス化が一度ならモジュールで十分ということですね。
===
Pythonにはjava同様、便利なモジュールを標準ライブラリとして搭載しています。
math(複雑な計算),random(ランダム値生成),datetime(日付や時間操作)等インポートすることで使えます。
これについても詳しいライブラリ、メソッドについては各自で調べていただけると、、、
===
クラスの設定は
class クラス名:
インデント内が処理になります。(クラス名ははじめ大文字
インスタンスの作成は
インスタンス名 = クラス名 ()
でできます。
インスタンス変数は
で作成可能です。
クラス内のメソッドは
def メソッド名(self)
で作れます。引数が必要な場合は、selfの後ろに「,引数」で出来ます。
def __init__(self):
で作成できます。
メソッドの使用は
インスタンス名.メソッド名(引数)
インスタンス変数をクラス内で作成するには
self.インスタンス変数名
に代入すれば可能です。
ここまでが↓
67でnamingクラスのインスタンスを作って、クラスのコンストラクタでnameインスタンス変数が作られます。
そして、68でfamilynameインスタンス変数を作って、69でfull_nameメソッドを使うことで、familynameやnameの繋がったfullname変数ができます。
そしてそれを出力すると「1番のフルネームはあいうえおか」と表示されます。
===
クラスを別ファイルにおき、そのクラスを用いてさらに具体的なサブクラスを作れます。
そのクラス継承のやり方はまず、下記のように別ファイルからクラスをインポートし、
from ファイル名 import メインクラス名(こうすることで、インスタンス作成時にファイル名を一々書く必要がなくなる
それから下記のように書きます。
class サブクラス名 (メインクラス名):
これで継承完了です。
継承したサブクラスでインスタンスを作ると、メインクラスのメソッドが
インタンス名.メソッド名
で用いれます。
サブクラス独自のメソッドの作り方はクラス作成でやった通り。
オーバーライド等も同様に起こるため、継承した子クラス内でメソッドやコンストラクタ__init__を上書きすることもできます。
ちなみに
super().メソッド名(引数)
で親クラスのメソッドを子クラスで用いることもできます。
===
とりあえずここまでで、他の言語をやったことのある人にはPythonのクラスの継承のところまでザッとわかる内容になったと思うので、この記事ではこの辺りまでとしたいと思います。
もちろんより詳しい部分に関しては別々に調べてみてください。
ではまた別の記事でお会いしましょう!