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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Geson Anko
February 16, 2025
130
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
49
ML集会 2025年10月15日 LTのはじめかた
gesonanko
0
61
【RSJ2025】PAMIQ Core: リアルタイム継続学習のための⾮同期推論・学習フレームワーク
gesonanko
0
890
自律機械知能基礎論 2024
gesonanko
0
47
2024年5月18日 XRMTGエンジニア飲み集会LT
gesonanko
0
47
AMI System基礎 2025
gesonanko
1
110
2025年1月10日 エンジニア集会 誰かと開発するために
gesonanko
0
120
2024年3月27日 ML集会 非同期AMI基盤システムα
gesonanko
0
76
非同期AMI Sys ロードマップ to Milestone 2
gesonanko
0
53
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How to Talk to Developers About Accessibility
jct
2
220
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
600
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
600
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
Six Lessons from altMBA
skipperchong
29
4.3k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
200
Done Done
chrislema
186
16k
Visualization
eitanlees
152
17k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
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