【初心者向け】Pythonのクラスと型ヒント

Pythonクラスと型ヒント プログラミング

この記事ではPythonのクラスと型ヒントについて解説していきます。
クラスを作成することで、同様のデータ形式や処理をまとめた型を作成することができます。クラスを使用してインスタンスを作成することで、同様の型のもの簡単に作成することができます
型ヒントは、変数や関数での型を定義したものになります

クラス

クラス定義

クラスを作成すると、同じ形式でインスタンスをいくつも作成することができます。

class ClassName():  ←クラス定義
  処理

変数=ClassName()  ←インスタンス化

# クラス定義
class User:
    user_type = "human"  # クラス変数

    def __init__(self, name, age, address):  # インスタンス変数
        self.name = name
        self.age = age
        self.address = address

    def greeting(self):
        print("こんにちは!")


# クラス変数へはインスタンス作成前でもアクセス可
print(User.user_type)
# >>>human

# インスタンス化
user = User("鈴木太郎", 10, "東京都豊島区")

# インスタンス変数
print(user.name)
# >>>鈴木太郎

user.greeting()
# >>>こんにちは!
属性とメソッド

()なしで呼び出せるのが属性、()ありで実行するのがメソッド
特殊メソッド:あらかじめ関数や演算子などのふるまいを定義できるもの(例:__init__)

特殊メソッド/プロパティ化

特殊メソッドを定義することやメソッドを()なしで実行するプロパティ化を行うことができます。

__repr__インスタンス情報を返却する
__len__インスタンスの文字列の長さを返却する
__eq__インスタンス同士を比較する
@propertyメソッドをプロパティ化する
# 特殊メソッド/プロパティ化
class User:

    def __init__(self, name, age, address):
        self.name = name
        self.age = age
        self.address = address

    def __repr__(self):
        return f"id:{id(self)} name:{self.name}"

    def __len__(self):
        return len(self.name)

    def __eq__(self, value):
        return self.age == value.age

    @property
    def greet(self):
        print(f"こんにちは、{self.name}です!")


# インスタンス化
user = User("鈴木太郎", 10, "東京都豊島区")

# __repr__
print(user)
# >>>id:2247695786368 name:鈴木太郎

# __len__
print(len(user))
# >>>4

# __eq__
user2 = User("山田花子", 15, "東京都港区")
user3 = User("佐藤一郎", 10, "東京都中央区")
print(user == user2)
print(user == user3)
# >>>False
# True

# プロパティ化
user.greet
# >>>こんにちは、鈴木太郎です!

dataclass

データをまとまって渡す場合など、効率的にデータをクラスで管理する場合に使用されます。
dataclassを使用するとクラス変数を使用でき、__repr__も自動で設定されます。

from dataclasses import dataclass, asdict, astuple


# クラス定義------------------
@dataclass
class User:
    name: str
    age: int
    address: int
    active: bool = False  # 任意引数


user = User("太郎", 10, "東京都豊島区")

# インスタンス
print(user)
# >>>User(name='太郎', age=10, address='東京都豊島区', active=False)

# 辞書変換
print(asdict(user))
# >>>{'name': '太郎', 'age': 10, 'address': '東京都豊島区', 'active': False}

# タプル変換
print(astuple(user))
# >>>('太郎', 10, '東京都豊島区', False)

型ヒント

型ヒントとは

変数や関数の型を定義するもの、IDEなどで効率的に品質良くコーディングするために使用する。ただ、制限はなく、定義した型どおりに値を代入しなくてもエラーは発生しません

・num : int
・def func(num : int) →str

num:int=1
def func(num:int) -> int:
    return num * 2

リストや辞書などでも同様に設定でき、かつ要素内の型も定義することができます。

li: list[str] = ["オレンジ", "イチゴ"]
di: dict[int:str] = {1: "アメ"}

タプルの要素内の型を定義する場合は、すべての要素分記述するか、同じ要素を繰り返す場合は、「…」を使用します。

Typingモジュール

typinigモジュールを使用することで、より詳細に型を定義することができます。

Union[int,str][]内のいずれかを受け入れる
Optical[int]Noneと定義した型を受け入れる
Literal[csv,txt,xlsx]左記と合致するものを受け入れる
Anyどんな型でも受け入れる
from typing import Union,Optional,Literal,Any

num: Union[int:str] = 1
num: Optional[int] = None
num: Literal['csv','txt'] = 'sample.txt'
num: Any = 'こんにちは'
タイトルとURLをコピーしました