Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Pythonクラス基礎
Search
Geson Anko
February 16, 2025
140
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pythonクラス基礎
Geson Anko
February 16, 2025
More Decks by Geson Anko
See All by Geson Anko
2025年12月3日.人類には激kawaiiネコミミメイドロボが必要である
gesonanko
0
51
ML集会 2025年10月15日 LTのはじめかた
gesonanko
0
66
【RSJ2025】PAMIQ Core: リアルタイム継続学習のための⾮同期推論・学習フレームワーク
gesonanko
0
910
自律機械知能基礎論 2024
gesonanko
0
50
2024年5月18日 XRMTGエンジニア飲み集会LT
gesonanko
0
49
AMI System基礎 2025
gesonanko
1
110
2025年1月10日 エンジニア集会 誰かと開発するために
gesonanko
0
120
2024年3月27日 ML集会 非同期AMI基盤システムα
gesonanko
0
80
非同期AMI Sys ロードマップ to Milestone 2
gesonanko
0
54
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
The Curious Case for Waylosing
cassininazir
1
410
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Balancing Empowerment & Direction
lara
6
1.2k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Marketing to machines
jonoalderson
1
5.5k
The Spectacular Lies of Maps
axbom
PRO
1
830
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
Transcript
Pythonクラス 基礎 GesonAnko
1 ⽬次 1. オブジェクト指向 2. Pythonのクラスについて 1. クラスの作り⽅ 2. インスタンス化
3. メンバー関数(メソッド) 4. クラス property 5. 特殊なメンバー変数・関数 6. 特殊なクラス Enum 3. 基底クラスと継承 1. クラス継承 2. 継承の⽤途 3. 抽象基底クラス 4. 多重継承: Mixin 5. 継承の危険性 6. 継承を避ける⽅法 4. 参考⽂献
2 オブジェクト指向について • ⼤きく割愛 • オブジェクト指向については散々他で解説されているので。 • データとその関⼼のある処理をセットにしたもの。 • Ex.
「ねこ」オブジェクトは「鳴き声」というデータをもち、「鳴く」という 処理を⾏うことができる。 • Object “🐱” has 🎶 • Object “🐱” can 🗣 • 参考: オブジェクト指向(OOP)を解説してみる • https://zenn.dev/cloud_ace/articles/29748ac0537c7f
3 オブジェクト指向について • クラス(類・型)とインスタンス(実体) • 猫 “🐱”という種類・典型には、 道端を歩く猫 “🐈” という実体がある。
• クラスは 種類そのものである。 • インスタンスはその実態の⼀つである。 • 集合と要素とイメージすると良い。 • インスタンス化 (instantiate) • クラスを基に実体を構築 (Construct) すること クラス “🐱” 🐈 🐈⬛ インスタンス
4 Pythonのクラスについて
5 Pythonのクラスについて • 全ては “object” クラス である。 • データ、処理(関数)、あらゆるものは “object”という類に属す
クラス “object” int str type object bool list dict 1 “hello” True
6 Pythonのクラスの作り⽅ • “class” 構⽂ • クラスのメンバー定義 • 変数、関数(メソッド)、クラス Tips:
型アノテーションによる変数宣⾔
7 インスタンス化 • 特殊メンバー関数`__init__`が呼ばれる。(コンストラクタ) • インスタンス⾃⾝が第⼀引数 (`self`)として与えられる。 • メモリが分離され、別のオブジェクトとなる。 •
通常はここでメンバー変数の定義を⾏うことが多い。 ⚠ 以降、すべてのメンバ関数の 第1引数に`self`が与えられる。 i.e. メンバー関数 は通常 `self`引数 を必ず持つ。
8 メンバー関数(メソッド) • `staticmethod` • クラスをインスタンス化せずとも使⽤可能なメソッド • 第⼀引数にインスタンス `self`を持たない。 •
`classmethod` • 第⼀引数に クラスオブジェクト⾃体 `cls` を受け取る。 • カスタムコンストラクタなどに使われる。
9 クラスのpropertyについて • Getter, Setter, Deleterを定義する。 • Getter: クラスから変数(属性)を取得する時に呼ぶメソッド •
Setter: クラスの変数(属性)を変更するときに呼ぶメソッド • Deleter:クラスの変数(属性)を削除するときに呼ぶメソッド • ただのメンバー変数のように呼べるが、内部的に関数のような ものとなっている。(setterは値を受け取る) • ℹ `setter`を定義しなければ、値は読み取り専⽤になる • ℹ `deleter`を定義しなければ、値は削除できなくなる。 • クラス変数の⾼度なアクセス制御、副作⽤の実 装をするために⽤いることが多い。
10 特殊なメンバー変数・関数について • 特殊なメンバー変数 • __class__: インスタンスのクラスオブジェクトを返す。 • `__class__.__name__` クラス名を返す。
• __dict__: オブジェクトの参照可能なメンバー名とオブジェクトの辞書を返す。 • 特殊なメンバー関数 • __del__: オブジェクトが破棄されるときに呼ばれる(del object) • __len__: len関数から呼ばれる。 (len(object)) • __eq__などの⽐較演算⼦系 • __add__などの算術演算⼦系 • __enter__, __exit__: コンテキストマネージャのフック(with 構⽂⽤) • __iter__, __next__: イテレータやジェネレータの定義 • __int__, __str__などのビルトイン型への変換メソッド( int(object), str(object)) • __getattibute__, __setattribute__などの属性参照時のフック • __getitem__, __setitem__などのアイテム参照のフック (object[0], object[0] = 1) 特に⼤事 特に⼤事 Pythonの不思議な 振る舞いの多くは ここで定義されるよ!
11 特殊なクラス Enum • オブジェクトを列挙する • フラグの設定などなど ⾃動で割り付けしてくれる `auto` ⽂字列にもしてくれる
StrEnum 整数にもしてくれる IntEnum フラグ処理もやってくれる IntFlag ⚠ 注意 →
12 基底クラスと継承
13 クラス継承 • 継承 • 基のクラスの機能を引き継いで、新たなクラスを作る • 機能追加・上書き、バリアント作成 • 基底クラス
• 継承される基となるクラスのこと • `super` classとも⾔う。 • Tips: すべてのクラスは “object” を⾃動的に継承する
14 クラス継承の⽤途 1. 扱いやすいAPIを提供 • 複雑な処理を基底クラスの中に隠蔽する。 • Ex. PyTorchの `nn.Module`:
パラメータ管理や最適化機能を提供 2. オブジェクトの仕様・取り扱い⽅を統⼀ • 共通のメソッド・属性を持つことを保証する。 • Ex. ベンダーごとに中⾝の実装は分けたい(ChatGPT, Gemini, Claude, …) でも外部からの取り扱われ⽅(チャット機能)は統⼀したい • → 抽象基底クラスへ
15 抽象基底クラス • ABCを継承して実装する。 • Abstract Base Class • `@abstractmethod`
デコレータ • メソッド(インターフェイス)に付与。 • 継承先にその実装を強制させる。 • 実装せずにインスタンス化しようとするとエラー
16 多重継承: Mixin • Mixinクラス • 基底クラスと⼀緒に継承。 • 機能をさらに注⼊できる。 •
実際のSystemでの⽤途 • システムの停⽌・再開のイベント呼び出し
17 ⚠ 継承の危険性 • 機能破壊 • 変数やメソッドの上書き (Pythonにはマングリング機構があるが…) • メソッドに全く異なる振舞いの定義
• メンテナンスコストの増⼤ • 基底クラスの変更は、その派⽣クラス全てに影響する • 多層の継承はダメ、絶対 • 「ちょっと別のバリエーションが欲しいから…」 ← ❌ Class A Class B(A) Class C(B) 🔧変更! 影響! 不具合! 💥 破壊!
18 継承を避ける⽅法 • ラッパークラス • 振舞いの変更 • typing.Protocol • インターフェイスの統⼀
(⼊出⼒型の検査) • ダックタイピングのためのもの
19 参考⽂献 • オブジェクト指向(OOP)を解説してみる • https://zenn.dev/cloud_ace/articles/29748ac0537c7f • Python3公式ドキュメント: property •
https://docs.python.org/ja/3.13/library/functions.html#property • Python3公式ドキュメント: 3. データモデル • https://docs.python.org/ja/3/reference/datamodel.html • Python3公式ドキュメント: enum --- 列挙型のサポート • https://docs.python.org/ja/3.13/library/enum.html • Python3公式ドキュメント: 9. クラス • https://docs.python.org/ja/3.13/tutorial/classes.html • abc --- 抽象基底クラス • https://docs.python.org/ja/3.13/library/abc.html
20 参考⽂献 • マングリング機構について • https://pep8-ja.readthedocs.io/ja/latest/#id37 • Python3: Protocol •
https://docs.python.org/ja/3.13/library/typing.html#typing.Protocol • PythonにおけるProtocol(ダックタイピング)とABC(抽象化)の違い • https://zenn.dev/ibaraki/articles/bef0b43522475b