Python学習用

オブジェクト指向プログラミング言語

これはPythonで書かれたほぼ全てのものがオブジェクトであるということを意味するよ。オブジェクト指向プログラミング(OOP)の基本は、データとそのデータを操作する手続きを一つの「オブジェクト」としてまとめることにあるんだ。

オブジェクトとは?

オブジェクトは、データ(属性)とそれを操作するためのコード(メソッド)をカプセル化するプログラミングの構造体だよ。例えば、車を考えてみるといい。車は色やブランドといった属性を持っているし、加速する、停止するといった操作(メソッド)を実行できる。Pythonでは、これらの属性やメソッドを一つのオブジェクトにまとめることができるんだ。

クラスとインスタンス

オブジェクトを作るには、まずそのオブジェクトの「設計図」にあたるクラスを定義する必要がある。クラスはオブジェクトの属性とメソッドを定義するけど、それ自体は実際のデータを持たない。具体的なデータを持ったオブジェクトを作るには、クラスからインスタンスを生成するんだ。
class Car:
def __init__(self, color, brand):
self.color = color
self.brand = brand
def accelerate(self):
print(f"{self.brand} is accelerating.")
my_car = Car("red", "Toyota")
このコードでは、Carクラスを定義しているね。このクラスには__init__メソッド(コンストラクタ)があり、新しいCarインスタンスが作られるときに自動的に呼ばれる。accelerateメソッドは車が加速するアクションを表している。my_carはCarクラスのインスタンスで、具体的な色とブランドを持っているオブジェクトだ。

属性とメソッド

オブジェクトの属性はそのオブジェクトが持っているデータで、メソッドはそのデータに対して行う操作を定義したものだ。メソッドを使って、オブジェクトの内部状態を変更したり、オブジェクトに関する情報を取得したりできる。

継承

Pythonの強力な機能の一つに継承がある。これは、あるクラス(親クラス)の属性やメソッドを別のクラス(子クラス)が引き継ぐことができるというもの。これによって、既存のコードを再利用しやすくなり、コードの重複を避けることができる

アイデンティティの概念

オブジェクトの「同一性」を指します。これはオブジェクト自身の一意性を意味し、メモリ上のそのオブジェクトの場所(アドレス)に基づいています。Pythonでは、id() 関数を使って、任意のオブジェクトのアイデンティティ(つまり、そのオブジェクトのメモリ上のアドレス)を取得する。
オブジェクトがプログラム実行中に一定であり、他のオブジェクトとは区別される一意の識別子です。Pythonでのアイデンティティの比較には is キーワードが使用され、二つのオブジェクトが同じメモリアドレスを参照しているかどうかをチェックします。

a = [1, 2, 3]
b = a
c = [1, 2, 3]

# a と b は同じオブジェクトを参照している
print(a is b) # True
# a と c は内容は同じだが、異なるオブジェクト
print(a is c) # False

a と b は同じリストオブジェクトを参照しているため、a is b は True を返します。
一方で、a と c は内容は同じですが、別々のオブジェクト
(つまり異なるメモリアドレスに存在する)であるため、a is c は False を返す。
アイデンティティの比較(is)と値の比較(==)を混同しないことが重要です。
== はオブジェクトの内容が等しいかどうかをチェックしますが、
is はオブジェクトのアイデンティティが同じかどうか、
つまり同じオブジェクトを参照しているかどうかをチェック。
関数に変数を渡す際に変数が書き変わるかどうかは、その変数がどのようなデータ型か、
そしてそのデータ型がミュータブル(変更可能)かイミュータブル(変更不可能)かによって異なるよ。
Pythonでは、数値、文字列、タプルなどはイミュータブルで、リスト、辞書、セットなどはミュータブル。
```
print(1)
print(5 + 8)
print('楽'*3)

test='happy'
print(test)

"""
import keyword
print(keyword.kwlist)  # 使用できない予約後の確認

name = input('入力してください, Please Entry >> ') # ユーザの入力を待つ
print(name)
"""

x = 10
print(type(x))  # 変数のデータ型を調べる

name = 1
test = 2
phone = 3
print('表示{}、表示{}、表示{}'.format(name, test, phone))
print(f'表示{name}、表示{test}、表示{phone}')




list = ['test0', 'test1', 'test2']
print(list[0])


sucore = [98, 56, 73]
total = sum(sucore)
print(total)

avg = total / len(sucore)
print('平均{}'.format(avg))

sucore02 = [98, 56, 73]
sucore02.append(100)
print(sucore02)
total02 = sum(sucore02)
avg02 = total02 / len(sucore02)
print('平均{}'.format(avg02))

sucore02.remove(100)
print(sucore02)

sucore02[1] = 123
print(sucore02)
```


# listの追加削除
```
sucore03 = {'test' : 98, 'json' : 56, 'java' : 73}
print(sucore03)

sucore03['add'] = 100
sucore03['test'] = 1000
print(sucore03)

del sucore03['json']
print(sucore03)

total03 = sum(sucore03.values())
print(total03)
```

# ディクショナリの変更
```
sucore04 = {'test' : 100, 'json' : 56, 'java' : 100}
member = ['大江', 'マツダ', '田中']
print(tuple(member))
# print(list(sucore04))
print(set(sucore04.values()))
```

# ネスト
```
a = [1, 2, 3]
b = [4, 5, 6]
c = [a, b]

print(c)
print(c[0])
print(c[1][2])
```

# 集合演算
```
c = {1, 2, 3, 4, 5}
d = {4, 5, 6, 7}
print(c | d)
print(c & d)
print(c - d)
print(c ^ d)
D = c & d
print(set(D))

print(a[-1])
```

# inは、ある要素がリストや文字列などのコレクション内に存在するかどうかをチェックするのに使われる
```
fruits = ['apple', 'banana', 'cherry']
if 'apple' in fruits:
    print('Apple is in the list!')
else:
    print('Apple is not in the list.')
```

# aがbより大きいかどうかを評価し、その結果をFalseまたはTrueで出力
```
a = 5
b = 10
print(a > b)  # Falseが出力される
print(a < b)  # Trueが出力される
```

# if notを使うと、条件が偽(False)であるかどうかをチェック
```
my_list = []
if not my_list:  # my_listが空の場合、Trueと評価される
    print("The list is empty.")
else:
    print("The list is not empty.")
```

# elifは、複数の条件を順にチェックする
```
score = 75
if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
else:
    print("Grade: F")
```

# PythonBool型の変数名をつける際は、その変数が真偽値を保持していることが明確にわかるようにします。
# 一般的に、is、has、canなどの接頭語を使用して変数名を始めることが多いです。
# 例えば、あるオブジェクトが空かどうかを表す変数はis_empty、
# 特定の権限をユーザーが持っているかどうかを示す変数はhas_permission、
# ある操作を実行できるかどうかを示す変数はcan_executeなど

```
count = 0
while count < 5:
    print("Count is less than 5")
    count += 1

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)
```

# range(n)は、0からn-1までの数値のシーケンスを生成します。
# 主にforループ内で使われ、特定の回数だけアクションを繰り返す
```
for i in range(2):
    print('繰り返し')
```

# 1から10までの数字を順にチェックし、
# iが5になった瞬間に"Found 5!"を出力してループを中断
```
for i in range(1, 11):
    if i == 5:
        print("Found 5!")
        break
```

# 1から10までの数を印刷するが、5の時はスキップ
```
for i in range(1, 11):
    if i == 5:
        continue
    print(i)
```

# isinstance()はPythonの組み込み関数で、指定されたオブジェクトが指定されたクラスまたはタプルに
# 含まれるクラスのいずれかのインスタンスかどうかをチェック
# isinstance(x, int)は、xが整数(int型)のインスタンスである場合にTrueを返す


def
関数を定義する
```
def greet(name):
    print("Hello, " + name + "!")

greet("Alice")
```
関数はnameというパラメータを受け取り、"Hello, " + name + "!"というメッセージを出力します。そして、greet("Alice")を呼び出すことで、"Hello, Alice!"と出力。

return
関数から値を返すことができます。関数がreturn文に達すると、関数はその場で実行を終了し、return文に続く値を呼び出し元に返します。関数から何も返さない場合、Pythonは自動的にNoneを返す。
```
def add(a, b):
    return a + b

result = add(3, 4)
print(result)  # 7を出力
```
dd関数が2つの数値を受け取り、それらの和を返します。add(3, 4)の呼び出しは、3 + 4の結果である7を返します。そして、この返された値がresult変数に格納される。

デフォルト値
関数が呼び出されたときに引数が提供されない場合に使用される値を指定できる。
```
def greet(name="World"):
    print("Hello, " + name + "!")

greet()         # "Hello, World!" を出力
greet("Alice")  # "Hello, Alice!" を出力
```

可変長引数
関数に任意の数の引数を渡す
```
def make_greeting(*names):
    for name in names:
        print("Hello, " + name + "!")

make_greeting("Alice", "Bob", "Charlie")  
 # Alice, Bob, Charlie それぞれに対して挨拶を出力
```

```
def print_info(**info):
    for key, value in info.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30)  # name: Alice, age: 30 と出力
```
*argsを使う例では、複数の名前を引数として渡し、それぞれに挨拶を出力します。**kwargsを使う例では、キーワード引数として渡された情報をキーと値のペアで出力。

open() 関数と close() メソッド

open() 関数でファイルを開き、作業が終わったら close() メソッドを使ってファイルを閉じる。

# ファイルを開く
file = open('example.txt', 'r') # 'r'は読み取りモードを意味する
# ファイルからデータを読み取る(ここでは例として全てのテキストを読み込む)
content = file.read()
print(content)
# ファイルを閉じる
file.close()

with ステートメント

この方法の利点は、ブロック内の処理が終わると自動的にファイルが閉じられるため、ファイルを閉じ忘れる心配がない。

# withステートメントとopen()関数を使用してファイルを開く
with open('example.txt', 'r') as file:
# ファイルからデータを読み取る
content = file.read()
print(content)
# このブロックを抜けると、ファイルは自動的に閉じられる

書き込みモード('w')を使用すると、既存の内容を上書きします。追記モード('a')を使用すると、ファイルの末尾に内容を追加できます。

例外処理

プログラム実行中に発生したエラーや予期しない事態(例外)に対処するための仕組みだよ。Pythonではtry、except、else、finallyのブロックを使って例外処理を行う。これにより、エラーが発生してもプログラムが強制終了することなく、適切に対応したり、リソースの解放などの後処理を行ったりできる。
基本構文
try: 例外が発生する可能性のあるコードブロック
except: 特定の例外が発生した場合に実行されるコードブロック
else: 例外が発生しなかった場合に実行されるコードブロック(任意)
finally: 例外の発生に関わらず、最後に必ず実行されるコードブロック(任意)

try:
    # ユーザーからの入力を受け取る
    num = input("数値を入力してください: ")
    # 入力を数値に変換
    num = float(num)
    # 逆数を計算
    inverse = 1 / num
except ValueError:
    # 数値に変換できない入力があった場合
    print("数値以外が入力されました。")
except ZeroDivisionError:
    # 0が入力され、ゼロ除算が発生した場合
    print("0では除算できません。")
else:
    # 例外が発生しなかった場合
    print(f"入力された数値の逆数は{inverse}です。")
finally:
    # 最後に必ず実行されるブロック
    print("処理が終了しました。")

tryブロック内で数値変換と逆数計算を試みる。もしValueError(数値に変換できない入力)やZeroDivisionError(ゼロ除算)が発生した場合、それぞれのexceptブロックが実行される。例外が発生しなかった場合はelseブロックが、最後には何があってもfinallyブロックが実行される


いいなと思ったら応援しよう!

Ken @ インフラエンジニア
よろしければサポートお願いします!よりいい情報を発信します。