Python型オブジェクト
Pythonのすべては、クラスを含むオブジェクトです。すべてのクラスは「type」と呼ばれるクラスのインスタンスです。typeオブジェクトはtypeclassのインスタンスでもあります。クラスオブジェクトの__bases__属性を調べることにより、クラスの継承階層を調べることができます。 type()メソッドは、パラメーターとして渡されたargument(object)のクラスタイプを返します。単一の引数type(obj)がtypeメソッドに渡された場合、指定されたオブジェクトのタイプを返します。 3つの引数type(name、bases、dict)が渡されると、新しい型オブジェクトが返されます。
type()の使用
最もよく使用されるデータ型のクラスを見てみましょう。以下のプログラムでは、いくつかの変数を初期化し、type()を使用してそれらのクラスを確認します。
例
# Some variables a = 5 b = 5.2 c = 'hello' A = [1,4,7] B = {'k1':'Sun','K2':"Mon",'K3':'Tue'} C = ('Sky','Blue','Vast') print(type(a)) print(type(b)) print(type(c)) print(type(A)) print(type(B)) print(type(C))
出力
上記のコードを実行すると、次の結果が得られます-
<class 'int'> <class 'float'> <class 'str'> <class 'list'> <class 'dict'> <class 'tuple'>
クラスの種類
上記のクラスのタイプを詳しく調べると、それらはすべて「type」という名前のクラスに属していることがわかります。
例
print(type(int)) print(type(dict)) print(type(list)) print(type(type))
出力
上記のコードを実行すると、次の結果が得られます-
<class 'type'> <class 'type'> <class 'type'> <class 'type'>
新しいオブジェクトタイプの作成
上記と同様のアプローチを使用して、新しいオブジェクトを作成することもできます。ここでは、3つのパラメータを渡して、新しいタイプのオブジェクトを作成します。
例
Object1 = type('A', (object,), dict(a='Hello', b=5)) print(type(Object1)) print(vars(Object1)) class NewCalss: a = 'Good day!' b = 7 Object2 = type('B', (NewCalss,), dict(a='Hello', b=5)) print(type(Object2)) print(vars(Object2))
出力
上記のコードを実行すると、次の結果が得られます-
<class 'type'> {'a': 'Hello', 'b': 5, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None} <class 'type'> {'a': 'Hello', 'b': 5, '__module__': '__main__', '__doc__': None}
-
Pythonのメタクラスを使用したメタプログラミング
メタプログラミングという用語は、コンピュータープログラムがそれ自体を操作したり、知識を持ったりしようとするコンピュータープログラミングを指します。 Pythonは、メタクラスと呼ばれる新しいタイプのクラスを介したクラスのメタプログラミングをサポートしています。 Pythonのメタクラスを介したメタプログラミングは、既存のコードを変更、ラップ、または生成することによってコードを操作する関数とクラスを構築することです。 メタプログラミングの主な機能は次のとおりです- メタクラス デコレータ クラスデコレータ メタクラスとは メタクラスの非常に限定された定義は、クラスを作成するクラスである
-
Pythonクラスはどのようにオブジェクトを継承しますか?
Python 2.xには、基本クラスとしての組み込み型の有無に応じて、2つのスタイルのクラスがあります- 「オールドスタイル」または「クラシック」スタイルのクラス:基本クラスとしての組み込みタイプはありません- >>> class OldFoo: # no base class ... pass >>> OldFoo.__bases__ () 「新しい」スタイルクラス:基本クラスとして組み込み型があります。つまり、直接的または間接的に、基本クラスとしてオブジェクトがあります- >&g