クラス

公式サイト:

クラス | Python 3.x ドキュメント [公式]

使い方

参考:

クラス | とほほの WWW 入門

導入

参考:

クラスの基本 | Python 学習講座

概要

参考:

オブジェクト指向プログラミングを完全理解 – Qiita

クラスを理解、オブジェクト指向プログラミングの基本を押さえる | 日経クロステック

継承

参考:

クラス継承 (super) – Qiita

クラスの継承に関する知識と方法のまとめ | HEADBOOST

クラスの継承についてやさしく解説 | CodeCampus

初期化

子クラスを初期化する例
class SubClass(SuperClass):
    def __init__(self, value, **kw)
        super().__init__(**kw)
        self.var = valueCode language: Python (python)

子クラスで __init__ を定義しなかった場合は、親クラスの __init__ がそのまま呼ばれる。子クラスで __init__ を定義した場合は、親クラスの __init__ を明示的に呼び出す必要がある。

参考:

継承と super() を使って派生クラスを init してみよう – Qiita

初期化メソッド – Qiita

How do I initialize the super class? – Stack Overflow

What happens if define a class without __init__ method? – Stack Overflow

multiple inheritance passing arguments to constructors using super – Stack Overflow

Introspecting arguments from the constructor function __init__ – Stack Overflow

Implicitly invoking parent class initializer – Stack Overflow

Understanding super() with __init__() methods – Stack Overflow

コンストラクタのオーバーロード

参考:

複数のコンストラクタを定義したい – Qiita

How to overload __init__ method based on argument type? – Stack Overflow

変数のスコープ

  • インスタンス変数
  • クラス変数

参考:

クラスメンバのスコープまとめ – Qiita

クラス変数とインスタンス変数を取り違えてハマった – Qiita

クラス変数とインスタンス変数 | UX MILK

クラス変数とインスタンス変数の違い | AI Academy Media

メンバー変数 – teratail

accessing super class variable in child class – Stack Overflow

super

参考:

親クラスのメソッド呼び出し | Python-izm

プロパティ

  • @property
  • @property_name.setter

ドキュメント:

property | Python 3.x ドキュメント [公式]

参考:

プロパティ宣言 – Qiita

プロパティのあれこれ – Qiita

プロパティについて理解したのでまとめる | nametake-blog

@property によるプロパティへのアクセス制御のまとめ | HEADBOOST

クラスでプロパティを使う | TIL

プロパティ | Python 学習講座

プロパティ | ゼロから学ぶ Python

インスタンス変数の入力値をバリデーションする方法 | DevelopersIO

プロパティの getter / setter は不要、それがパイソニック | のーずいだんぷ

What’s the pythonic way to use getters and setters? – Stack Overflow

プロパティをまとめて設定する

参考:

Setting multiple object attributes at once – Stack Overflow

short syntax for accessing multiple properties – Stack Overflow

クラス変数

ドキュメント:

ClassVar – typing | Python 3.x ドキュメント [公式]

PEP 526 – Syntax for Variable Annotations | Python.org [Official]

参考:

クラス変数の概念 | 神田 IT スクール

How to extract type from class property? (runtime type annotation check) – Stack Overflow

How to get class variables and type hints? – Stack Overflow

多重継承

参考:

How does super() work with multiple inheritance? – Stack Overflow

Calling parent class __init__ with multiple inheritance, what’s the right way? – Stack Overflow

判別する

  • isclass
  • isinstance
  • type
  • issubclass

参考:

type 関数/isinstance 関数 – 型を取得/判定する | note.nkmk.me

class かどうかを判定 | くりーむわーかー

isinstance

オブジェクトが指定したクラスのインスタンスかどうか判定する。

class Derived(Base):
    pass

obj = Derived()

if isinstance(obj, Base):
    print("Yay!")Code language: Python (python)

ドキュメント:

isinstance | Python 3.x ドキュメント [公式]

参考:

isinstance 関数の使い方/オブジェクトのデータ型を判定する | JavaDrive

クラスメソッド (@classmethod)

参考:

クラスメソッドの定義の仕方と staticmethod との違い | St_Hakky’s blog

メンバアクセス

クラス内でメンバにアクセスする場合は self. を付ける。

class Test(Base):
    # ...

    def do_something():
        self.prop_name = self.method_name(123)Code language: Python (python)

参考:

クラス内のメソッドを別のメソッド内で使う方法 – teratail

メンバの一覧を取得する

  • __dict__
  • dir()

ドキュメント:

dir | Python 3.x ドキュメント [公式]

object.__dict__ | Python 3.x ドキュメント [公式]

参考:

__dict__で少し遊ぶ | ねこゆきのメモ

Python の dir() 関数 | Python 入門

dir – モジュールの属性取得 | Python-izm

クラスのプロパティ情報取得 | ajisaba.net

what’s the biggest difference between dir and __dict__ in python – Stack Overflow

Explain __dict__ attribute – Stack Overflow

What is the __dict__.__dict__ attribute of a Python class? – Stack Overflow

プロパティを安全に取得する (getattr)

ドキュメント:

getattr | Python 3.x ドキュメント [公式]

参考:

getattr – Qiita

getattr() はオブジェクトの属性の値を返す | コムテブログ

Python の getattr 関数で属性を取得する | 小さなことをやってみるブログ

プロパティの型を取得/判定する

参考:

How to get type of object’s attribute – Stack Overflow

How to get type hints for an object’s attributes? – Stack Overflow

親クラスの一覧を取得する (__mro__)

参考:

サブクラス/スーパークラスを確認/issubclass /  __mro__ など | note.nkmk.me

Getting all superclasses – Stack Overflow

メソッドとは/関数とメソッドの違い

  • 関数引数を取り、戻り値を返す。
  • メソッドクラス内に定義された関数でオブジェクトのインスタンスに対して実行される。

参考:

関数とメソッドの違いとは | ガンマソフト株式会社

関数とメソッドの違い – Qiita

プライベートメンバ

参考:

クラスメンバのスコープまとめ – Qiita

クラス内からしか呼び出さないメソッドを明示する方法はないでしょうか? – スタック・オーバーフロー

__new__

参考:

__new__ ってなに? | 民主主義に乾杯

__new__ と __init__ とメタクラスと – Qiita

__new__ と __init__ の違いについて/具体例と解説 | babaye’s notes

__new__ と __init__/クラスコンストラクター | システムトラスト技術ブログ

__new__ がわからん | ゆくゆくは有へと

__new__ の第一引数について – teratail

patching __new__ method – Stack Overflow

error when running __new__? not invoking __init__ – Stack Overflow

__props__ / __init_subclass__

参考:

Accessing super class variable – Stack Overflow

metaclasses

参考:

What are metaclasses in Python? – Stack Overflow

object

参考:

クラス継承で object クラスを継承する理由 – teratail

Why do Python classes inherit object? – Stack Overflow

How can I create an object and add attributes to it? – Stack Overflow

キャストしたい

参考:

クラスキャスト | 民主主義に乾杯

型式では呼び出し式を使用できません

現象:

次のようなコードを書く。

var: Sample('hoge', 'fuga', 'piyo')

警告が発生する。

型式では呼び出し式を使用できません

原因:

  • アノーテーションに引数を与えている。

対処法:

アノーテーションには型のみを与え、その後に代入演算子 (=) を続けて初期化する。

var: Sample = Sample('hoge', 'fuga', 'piyo')

参考:

What are variable annotations? – Stack Overflow

Tips

関数とクラスの呼び出し/関数の引数を関数にすることの有用性やクラスの継承など – Qiita

オブジェクトの中身を確認したい場合に試すこと | naka-c

まとめ

クラス – Python 入門 | とほほの WWW 入門

チートシート クラス定義編 | @IT

クラス変数/クラスメソッド/スタティックメソッド | @IT

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA