クラス定義は、クラスオブジェクトを定義します ( 3.2 節参照):
classdef | ::= | "class" classname [inheritance] ":" suite |
inheritance | ::= | "(" expression_list ")" |
classname | ::= | identifier |
クラス定義は実行可能な文です。クラス定義では、まず継承リストがあれば それを評価します。継承リストの各要素の値評価結果はクラスオブジェクトか、 サブクラス可能なクラス型でなければなりません。 次にクラスのスイートが新たな実行フレーム内で、 新たなローカル名前空間と元々のグローバル名前空間を使って実行されます ( 4.1 節を参照してください)。 (通常、スイートには関数定義のみが含まれます) クラスのスイートを 実行し終えると、実行フレームは無視されますが、ローカルな 名前空間は保存されます。次に、基底クラスの継承リストを使って クラスオブジェクトが生成され、ローカルな名前空間を属性値辞書 として保存します。最後に、もとのローカルな名前空間において、クラス名が このクラスオブジェクトに束縛されます。
プログラマのための注釈: クラス定義内で定義された変数は
クラス変数です; クラス変数は全てのインスタンス間で共有されます。
インスタンス変数を定義するには、__init__() メソッドや
他のメソッド中で変数に値を与えます。クラス変数もインスタンス変数も
``self.name
'' 表記でアクセスすることができます。この表記で
アクセスする場合、インスタンス変数は同名のクラス変数を隠蔽します。
変更不能な値をもつクラス変数は、インスタンス変数のデフォルト値と
して使えます。
新形式のクラスでは、デスクリプタを使ってインスタンス変数の振舞い
を変更できます。