拡張モジュールの作者が定義できます。全ての拡張の型のコードはあるパターンに従うのですが、書き始める前に理解しておくべき細かいことがあります。このドキュメントはその話題についてのやさしい入門です。型の変数と見なします。ポインタのみを持ちます。関数がインタープリターから呼ばれるのかを決定します。それなので、新しい拡張の型を定義したいときは、新しい型オブジェクトを作成すればよいわけです。拡張の型を定義する伝統的な実装方法です。これはほとんどの場面で十分なものなのです。関数を使い、ヒープ上に配置された拡張の型も定義できますが、これについてはこのチュートリアルでは扱いません。m;}一度に把握するにはちょっと量が多いですが、前の章よりはとっつきやすくなっていることと思います。インスタンスごとに1回だけメモリ確保が行われます。構造体で、フラグと関数ポインタの集まりを定義しています。特定の操作が要求されたときに、この関数ポインタをインタプリタが見に行きます。オブジェクトの内容です。いう名前のフィールドを定義します。型オブジェクトへのポインタと参照カウントが格納されています。このマクロが用意されている理由は、構造体のレイアウトを抽象化し、デバッグビルドでフィールドを追加できるようにするためです。マクロの後にセミコロンはありません。これを警告するコンパイラもあります。PyFloatObject;2つ目は型オブジェクトの定義です。関心の無いフィールドまで全て並べたり、フィールドを宣言する順序に気を使ったりせずに済ませるのをお薦めします。コンパイラによってゼロで埋められるので、必要でない限り明示的には値の指定をしないのが一般的な作法になっています。フィールドの初期化に必須のボイラープレートです。"custom.Custom",実装している型の名前です。これは、オブジェクトのデフォルトの文字列表現やエラーメッセージに現れます。str型の名前が、モジュール名とモジュールにおける型の名前の両方をドットでつないだ名前になっていることに注意してください。モジュールと互換性を持たせるために重要なのです。割り当てるべきメモリがどのくらいなのかを知るためのものです。もっていると多重継承のときに問題が生じることがあります。リストにはあなたのタイプが最初にくるようにしなければなりません。メソッドを呼び出すことはできなくなります。その基底タイプよりも大きくしておくことです。なければ基底タイプにデータ用のメンバを追加したものでしょうから、したがって大きさはつねに増加するためこの条件は満たされています。クラスフラグを設定します。Py_TPFLAGS_DEFAULT,すべての型はフラグにこの定数を含めておく必要があります。定義されているすべてのメンバを許可します。