はじめに
プログラミング初学者が自分なりにPythonについてまとめてみた。
もし間違っていることを書いているようならご指摘いただけると幸いです。
Pythonとは
Pythonはオブジェクト指向プログラミング言語と呼ばれており、少ないコードで簡潔にプログラムを書ける。
公式ドキュメント
Pythonでできること
- AI(機械学習・深層学習)
- Webサイト作成
- ゲーム制作
- Web上の情報収集ツール(スクレイピング)
- データ処理・分析・解析
使用例
公式サイトから引用
- YouTube
"Python is fast enough for our site and allows us to produce maintainable features in record times, with a minimum of developers," said Cuong Do, Software Architect, YouTube.com.
- Google
"Python has been an important part of Google since the beginning, and remains so as the system grows and evolves. Today dozens of Google engineers use Python, and we're looking for more people with skills in this language." said Peter Norvig, director of search quality at Google, Inc.
オブジェクトとクラス
オブジェクトとは、データだけでなく、振る舞い(メソッド)を含み、クラスを定義することによって生成できるもののことである。
クラスではオブジェクトを作成する際の__データ__や__メソッド__を定義する。
classとは、クラスを定義する際のキーワード(予約語)
である。
クラスもオブジェクトの一種で(pythonはすべてオブジェクト)、クラスから生成したオブジェクトを特別に区別するために__インスタンス__と呼んでいる。
class SchoolMember:
def __init__(self, classes, name, number):
self.classes = classes
self.name = name
self.number = number
基本的なクラス定義の仕方はclassの後にクラス名を指定し、def ~~で関数(メソッド)を記述する。
この時、クラス名は大文字から始める。
__コンストラクタ__は、__init__
という名前で定義するのがルールである。
__コンストラクタ__はオブジェクト生成時に最初に実行される、初期化用の関数のことである。
コンストラクタの第一引数は__self__とし、__self__は__インスタンス__自身を指す。
# インスタンス生成
school_member1 = SchoolMember(1, 'Taro', 10)
# インスタンスの参照(instance).(member)
print(school_member1.classes) # 1
print(school_member1.name) # Taro
print(school_member1.number) # 10
# memberの書き換えも可能
school_member1.classes = 2
print(school_member1.classes) # 2
クラス内で定義された変数のことを__member__と呼び、今回だとclasses
、 name
、number
である。
クラスの継承
親クラス
の機能をそのまま引き継いだ子クラス
をクラスの継承と呼ぶ。
クラスの継承には既存のクラスが必要であり、既存のクラスに機能を追加したいときにクラスの継承を行うことで既存クラスに直接書き加えることなくメソッドなどの追加ができる。
クラスの継承元は親クラス
やスーパークラス
などと呼ばれ、継承先のクラスを子クラス
や派生クラス
などと呼ばれる。
簡単なクラス継承
class Game:
def __init__(self, name, hardware):
self.name = name
self.hardware = hardware
# 継承先(子クラス)の生成
class GameChild(Game):
def __init__(self, name, hardware, category):
self.name = name
self.hardware = hardware
self.category = category
game1_data = GameChild('Apex', 'PC', 'FPS')
print(game1_data.name)
# Apex
super()を使ったクラス継承
class Game:
def __init__(self, name, hardware):
self.name = name
self.hardware = hardware
class GameChild(Game):
def __init__(self, name, hardware, category):
# 親クラスのコンストラクタの呼び出し
super(GameChild, self).__init__(name, hardware)
self.category = category
game1_data = GameChild('VALORANT', 'PC', 'FPS')
print(game1_data.name)
# VALORANT
メソッド
メソッドとは、クラス内で定義された関数
やオブジェクトの属性として参照される関数
などのことである。
class Friend:
def __init__(self, year, sex, height, weight):
self.year = yaer
self.sex = sex
self.height = height
self.weight = weight
def calculation_BMI(self):
bmi = round(self.weight / ((self.height / 100) ** 2))
return bmi
friend1_data = Friend(20, 'man', 170, 55)
print(friend1_data.calculation_BMI())
関数とメソッドの違い
呼び出し方の違い
関数: 単独で呼び出しできる
メソッド: 変数や値に付けて呼び出す
print()
、len()
などは単独で呼び出せるので関数である。
print("Hello! Taro.")
# Hello! Taro.
print(len(["dog", "cat", "hamster", "fish"]))
# 4
リストに要素を追加するappend()
や文字列を繋ぐjoin()
は変数や値に付けて呼び出すメソッドである。
変数や値の後にドット(.) + メソッド
とすることで呼び出すことができる。
animal_list = ["dog", "cat", "hamster", "fish"]
animal_list.append("lion")
print(animal_list)
# ["dog", "cat", "hamster", "fish", "lion"]
animal_list_join = "/".join(animal_list)
print(animal_list_join)
# dog/cat/hamster/fish/lion
ただし、メソッドはデータ型に紐付いた関数のため、呼び出せる種類はデータ型で異なる。
上記の例のappend()
はリスト型の変数には使えるが辞書型には使えない。
またどちらでも使えるメソッドpop()
などもある。
参考