Pythonの匿名クラスとオブジェクトを探る
Pythonの組み込み type() 関数は、オブジェクトが属するクラスを返します。Pythonでは、組み込みクラスもユーザー定義クラスも、どちらも type クラスのオブジェクトです。
例
class myclass: def __init__(self): self.myvar=10 return obj = myclass() print ('class of int', type(int)) print ('class of list', type(list)) print ('class of dict', type(dict)) print ('class of myclass', type(myclass)) print ('class of obj', type(obj))
出力:
class of int <class 'type'> class of list <class 'type'> class of dict <class 'type'> class of myclass <class 'type'>
type() には3引数版があります:
構文
newclass = type(name, bases, dict)
この構文でクラスを動的に作成できます。type 関数の3引数:
- name — クラス名(新クラスの
__name__属性になる) - bases — 親クラスのタプル。継承しない場合は空タプル
- dict — 新クラスの名前空間を形成する辞書。属性、メソッド、それらの値を含む
匿名クラスの作成
上記の type() 3引数版で匿名クラスを作成できます。name引数は空文字列、第2引数はオブジェクトクラス(Pythonのすべてのクラスはobjectクラスを継承)を含むタプル。第3引数の辞書にインスタンス変数を追加。ここでは空にしておきます。
anon = type('', (object,), {})
匿名オブジェクトの作成
この匿名クラスのオブジェクトを作成:
obj = anon() print ("type of obj:", type(obj))
結果:オブジェクトが匿名クラスのインスタンスであることがわかります。
type of obj: <class '__main__.'>
匿名クラスとオブジェクトの例
インスタンス変数とインスタンスメソッドを動的に追加することもできます:
def getA(self): return self.a obj = type('', (object,), {'a':5, 'b':6, 'c':7, 'getA':getA, 'getB':lambda self: self.b})() print (obj.getA(), obj.getB())
出力:
5 6
Python
- Python OOP基礎:クラス、オブジェクト、継承、コンストラクタを解説
- Python データ型マスター: 実践ガイド
- Python timeit():実行時間測定の実例付きガイド
- Pythonディレクトリ・ファイル操作マスター:作成、移動、一覧、リネーム、削除
- Python REPL活用術:アンダースコアで前回結果に瞬時アクセス
- Python 辞書の基礎:キー、値、アクセス方法を完全解説
- Python タプル完全ガイド:定義、活用、リストとの違い
- Python print()で改行なし出力:endパラメータとその他のテクニック
- Python文字列操作マスター:replace、join、split、reverse、大文字小文字変換
- Python 数値型完全ガイド:不変な数値データ型の理解と活用
- PythonでCSVファイルを読み書きする包括的ガイド