上級Python開発コース
チャプター
>
レベル
数学モジュール
コード内省
目的
コード内省を使用して、屋根裏にしまい込まれた古いアイテムが何であるか、どのように使用するのかを調べます。
屋根裏にはあまり使われないオフィスがあり、いくつかの古いチェストに長い間忘れ去られた貴重品が入っています。特に指示がない限り、またはメモに情報が記されていない限り、フィールドで収集されたアイテムや定数を特定するのはなかなか難しい場合があります。それだけでなく、特定のオブジェクトで何ができるのか、またそのプロパティが何であるかを特定するのは困難です。これに対処するために、コード内省を使用します。
コード内省を使用すると、コードの特定のスニペットを検査して識別し、そのプロパティのいくつかを示すことができます。そのために、Pythonの基本コードにパッケージ化されている4つの組み込み内省関数、すなわち type() 、id() 、repr() 、dir() および help() を使用します。これらは次のように機能します:
type(): この関数は、与えた引数のオブジェクトがどの型であるかを通知します。例えば、変数を引数として渡すと、そのオブジェクトを変数として識別します。id(): Pythonで作成されたすべてのオブジェクトには、コード内でそのオブジェクトを識別する一意のIDがあります。この関数にオブジェクトを引数として渡すと、そのオブジェクトの一意のIDを返します。repr(): 文字列でない値を文字列に変換し、データを読みやすい形式に変換するのに便利です。dir(): この関数は、特定のオブジェクト型で何が達成できるのかを知るために、その関数が持つすべての属性を表示します。help(): Pythonのレジストリに存在する、指定されたオブジェクト、関数、クラス等に関するすべての情報を表示します。
さらに、新しい非同期関数として display() 関数があります。この関数は read() 関数に似ていますが、コード内省関数が生成する動的なデータのように、動的なデータを表示できるようにします。構文は次のとおりです: await player.display( -data-) 。これらのすべての関数はデータの分析に役立ち、メソッドを使用して新しい関数をインポートする場合や、識別したいコードのプロパティを分析する際に有用です。
これらの関数を使用して、屋根裏に保管されているアイテムを識別し、カタログ化します。最初に、赤いカーペットの上のものから始め、カラフルなカーペット上にある暗い X 印の方へ歩いていきます。このエリアには3つの定数、red_container 、green_container 、および blue_container があり、これらの定数はそれぞれのカラフルなカーペットに対応するチェスト内のコンテナを表します。
各X印に対して、チェストに向かい、open() 関数を使用してチェストを開き、対応するカラフルなカーペットの定数を使って collect() 関数でチェストからアイテムを取得します。type() 内省関数を使ってチェスト内の定数の型を識別し、その出力は生データであるため、repr() 関数で文字列に変換します。関数と定数を組み合わせた結果の文字列を表示するために speak() を使用します。例えば: player.speak(repr(type(red_container))) 。その後、定数そのものを引数にして speak() 関数を使用し、内容を直接表示します。例えば: player.speak(red_container) 。
3つの定数すべてを収集、内省、識別したら、机の前にある明るい X 印の方へ歩いていきます。ここで、item_id_red 、item_id_green 、および item_id_blue という3つの変数を作成し、これらは収集した各定数のID番号を格納するために使用します。id() 内省関数を使って定数の一意の識別番号を取得し、それを引数として渡します。変数の名前を定数の名前と合わせる形式の例: item_id_red = id(red_container) 。これを3つすべての変数と定数に対して行います。
3つの変数がすべて作成されたら、それらをすべて item_list という名前のリストに格納し、明るい X 印の場所で display() 関数を使用して、テーブル上のメモに記録されていることを確認します。例えば: await player.display(item_list) 。
リストが記録されたら、紫のカーペット上にある暗い X 印へ歩き、机に向かいます。ここでは、dir() 関数を使ってリストの属性を識別しますが、その出力は生データであるため、表示が難しい場合があります。そこで、repr() 関数を使用してデータを読みやすい文字列に変換します。item_attributes という変数を作成し、次のように結果の文字列を格納します: item_attributes = repr(dir(item_list)) 。最後に、display() 関数を使用して、テーブル上のメモに記録されていることを確認します。
白いカーペット上にある暗い X 印へ歩いて行き、dir() と同様に help() を使用して、オブジェクトに関するすべてのドキュメント情報を表示します。item_help という変数を作成し、次のように結果の文字列を格納します: item_help = repr(help(item_list)) 。最後に、レベルを完了するために、read() 関数を使用して、テーブル上のメモに記録されていることを確認します。