Python type()

1403 ワード

type()関数は、1つのタイプまたは変数のタイプを表示することができ、Helloはclassであり、そのタイプはtypeであり、hはインスタンスであり、そのタイプはclass Helloである.
classの定義は実行時に動的に作成され、classを作成する方法はtype()関数を使用することです.type()関数は、オブジェクトのタイプを返したり、type()の定義を必要とせずにHello関数でclass Hello(object)...クラスを作成したりすることができます.
>>> def fn(self, name='world'): #      
...     print('Hello, %s.' % name)
...
>>> Hello = type('Hello', (object,), dict(hello=fn)) #   Hello class
>>> h = Hello()
>>> h.hello()
Hello, world.
>>> print(type(Hello))

>>> print(type(h))

classオブジェクトを作成するには、type()関数を使用して3つのパラメータを順次入力します.
  • classの名前.
  • 継承の親クラスの集合は、Pythonが多重継承をサポートしていることに注意してください.親クラスが1つしかない場合は、tupleの単一要素の書き方を忘れないでください.
  • classのメソッド名は関数にバインドされ、ここでは関数fnをメソッド名helloにバインドします.
  • type()関数で作成されたクラスは、直接classと同じです.Python解釈器がclass定義に遭遇した場合、class定義の構文をスキャンしただけで、type()関数を呼び出してclassを作成します.
    通常、クラスはclass Xxx...で定義されていますが、type()関数では、動的にクラスを作成できます.つまり、動的言語自体がランタイム動的にクラスを作成することをサポートしています.これは静的言語とは非常に異なり、静的言語のランタイムにクラスを作成するには、ソースコード文字列を構築してコンパイラを呼び出す必要があります.あるいは、いくつかのツールを使用してバイトコードを生成して実装すると、本質的に動的にコンパイルされ、非常に複雑になります.