pytho****@googl*****
pytho****@googl*****
2011年 11月 7日 (月) 17:02:17 JST
Revision: f155d26208ba Author: Arihiro TAKASE <hinac****@gmail*****> Date: Mon Nov 7 00:01:21 2011 Log: 差分翻訳 2.7.2: reference/datamodel http://code.google.com/p/python-doc-ja/source/detail?r=f155d26208ba Modified: /reference/datamodel.rst ======================================= --- /reference/datamodel.rst Tue May 17 02:21:36 2011 +++ /reference/datamodel.rst Mon Nov 7 00:01:21 2011 @@ -58,6 +58,8 @@ 確実に行われるよう保証しているわけではありません。循環参照を持つごみオブ ジェクト収集の制御については、 :mod:`gc` モジュールを参照してください。 CPython以外の実装は別の方式を使っており、CPythonも将来は別の方式を使うか もしれません。 + オブジェクトが到達不能になったときに即座に終了処理されることに + 頼らないでください (例えば、ファイルは必ず閉じてください)。 実装のトレース機能やデバッグ機能を使えば、通常は収集されてしまうようなオブ ジェクトを生かしておくことがあるので注意してください。また、 ':keyword:`try`...\ :keyword:`except`' 文を使って例外を捕捉できる @@ -630,6 +632,13 @@ 読み出し専用の特殊属性: :attr:`__dict__` はモジュールの名前空間で、辞書 オブジェクトです。 + .. impl-detail:: + + CPython がモジュール辞書を削除する方法から、モジュール辞書はモジュー ルが + スコープから外れた時、その辞書が生きた参照を持っていてさえ、 + 削除されます。これを避けるには、辞書をコピーするか、辞書を直接 + 使っている間、モジュールを確保してください。 + .. index:: single: __name__ (module attribute) single: __doc__ (module attribute) @@ -773,17 +782,6 @@ デフォルト引数値を記憶できますが、コードオブジェクトではできません (実行時に計算される値を表現するため)。関数オブジェクトと違い、 コードオブジェクトは変更不可能で、変更可能なオブジェクトへの参照を (直接、間接に関わらず) 含みません。 - 読み出し専用の特殊属性: :attr:`co_name` は関数名を表しま す; :attr:`co_argcount` は固定引数 (positional - argument) の数です; :attr:`co_nlocals` は関数が使う (引数を含めた) ローカル変数の数です; - :attr:`co_varnames` はローカル変数名の入ったタプルです (引数名から始 まっています); :attr:`co_cellvars` - はネストされた関数で参照されているローカル変数の名前が入ったタプルで す; :attr:`co_freevars` は自由変数の名前が入ったタプルです。 - :attr:`co_code` はバイトコード列を表現している文字列で す; :attr:`co_consts` はバイトコードで使われているリテラルの入った - タプルです; :attr:`co_names` はバイトコードで使われている名前の入った タプルです; :attr:`co_filename` - はバイトコードのコンパイルが行われたファイル名で す; :attr:`co_firstlineno` は関数の最初の行番号です; - :attr:`co_lnotab` はバイトコードオフセットから行番号への対応付けを コード化した文字列です (詳細についてはインタプリタの - ソースコードを参照してください); :attr:`co_stacksize` は関数で (ロー カル変数の分も含めて) 必要なスタックサイズです; - :attr:`co_flags` はインタプリタ用の様々なフラグをコード化した整数で す。 - .. index:: single: co_argcount (code object attribute) single: co_code (code object attribute) @@ -800,6 +798,17 @@ single: co_cellvars (code object attribute) single: co_freevars (code object attribute) + 読み出し専用の特殊属性: :attr:`co_name` は関数名を表しま す; :attr:`co_argcount` は固定引数 (positional + argument) の数です; :attr:`co_nlocals` は関数が使う (引数を含めた) ローカル変数の数です; + :attr:`co_varnames` はローカル変数名の入ったタプルです (引数名から始 まっています); :attr:`co_cellvars` + はネストされた関数で参照されているローカル変数の名前が入ったタプルで す; :attr:`co_freevars` は自由変数の名前が入ったタプルです。 + :attr:`co_code` はバイトコード列を表現している文字列で す; :attr:`co_consts` はバイトコードで使われているリテラルの入った + タプルです; :attr:`co_names` はバイトコードで使われている名前の入った タプルです; :attr:`co_filename` + はバイトコードのコンパイルが行われたファイル名で す; :attr:`co_firstlineno` は関数の最初の行番号です; + :attr:`co_lnotab` はバイトコードオフセットから行番号への対応付けを コード化した文字列です (詳細についてはインタプリタの + ソースコードを参照してください); :attr:`co_stacksize` は関数で (ロー カル変数の分も含めて) 必要なスタックサイズです; + :attr:`co_flags` はインタプリタ用の様々なフラグをコード化した整数で す。 + .. index:: object: generator 以下のフラグビットが :attr:`co_flags` で定義されています: ``0x04`` ビットは、関数が ``*arguments`` 構文を使って @@ -1149,8 +1158,7 @@ 単一の基本演算から順序付けするための演算を自動的に生成したい場合には、 - `Total Ordering recipe in the ASPN cookbook - <http://code.activestate.com/recipes/576529/>`_ を参照して下さい. + :func:`functools.total_ordering` を参照してください。 .. method:: object.__cmp__(self, other) @@ -1314,9 +1322,13 @@ デスクリプタ (descriptor) の実装 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -以下のメソッドは、デスクリプタメソッドを持っているクラス (いわゆる *デスク リプタ (descriptor)* クラス) のインスタンスが -別の新たな形式のクラス、いわゆる *オーナ (owner)* クラスのクラス辞書に存在 する場合にのみ適用されます。以下の例での "属性" とは、属性の名前が -オーナクラスの ``__dict__`` に入っているプロパティ (porperty) を検索するた めのキーになっているような属性を指します。 +以下のメソッドは、このメソッド含むクラス (いわゆる +*ディスクリプタ(descriptor)* クラス) のインスタンスが +*オーナ (owner)* クラスに存在するときにのみ適用されます。 +(ディスクリプタは、オーナのクラス辞書か、その親のいずれかのクラス辞書に +なければなりません。) +以下の例での "属性" は、名前がオーナクラスの :attr:`__dict__` の +プロパティ (porperty) のキーであるような属性を指します。 .. method:: object.__get__(self, instance, owner) @@ -1374,7 +1386,7 @@ スーパクラス束縛 (Super Binding) ``a`` が :class:`super` のインスタンスである場合、束縛 ``super(B, obj).m()`` を行うとまず ``A`` 、続いて ``B`` に対して ``obj.__class_.__mro__`` を検索し、次に呼び出し: ``A.__dict__['m'].__get__(obj, - A)`` でデスクリプタを呼び出します。 + obj.__class__)`` でデスクリプタを呼び出します。 インスタンス束縛では、デスクリプタ呼び出しの優先順位はどのデスクリプタが定 義されているかに依存します。 データデスクリプタは、 :meth:`__get__` と :meth:`__set__` 、 :meth:`__delete__` の任意の組合せを定義することができ ます。 @@ -1518,8 +1530,8 @@ 以下のメソッドは組み込み関数 :func:`isinstance` と :func:`issubclass` のデ フォルトの動作を上書きするのに利用します。 -特に、 :class:`abc.ABCMeta` メタクラスは、抽象基底クラス (ABCs) を"仮想基底 クラス (virtual base classes)" として -任意のクラスや (組み込み型を含む) 型に追加するために、また他の ABC に組み込 むためにこれらのメソッドを実装しています。 +特に、 :class:`abc.ABCMeta` メタクラスは、抽象基底クラス (ABCs) を"仮想基底 クラス (virtual base classes)" として、 +他の ABC を含む、任意のクラスや (組み込み型を含む) 型に追加するために、これ らのメソッドを実装しています。 .. method:: class.__instancecheck__(self, instance) @@ -1532,10 +1544,10 @@ *subclass* が (直接、または間接的に) *class* のサブクラスと考えられる場 合に true を返します。 定義されていれば、 ``issubclass(subclass, class)`` の実装のために呼び出 されます。 -これらはクラスのタイプ(メタクラス)についての検査メソッドであることを留意 しておいて下さい。 -これらは実際のクラスでクラスメソッドとして定義することはできません。 -このことは検査がインスタンスを要求する特別なメソッドであることに密接に関係 しています、 -インスタンス自身がクラスであるのはこの場合だけです。 +なお、これらのメソッドは、クラスの型 (メタクラス) 上で検索されます。 +実際のクラスにクラスメソッドとして定義することはできません。 +これは、インスタンスそれ自体がクラスであるこの場合にのみ、 +インスタンスに呼び出される特殊メソッドの検索と一貫しています。 .. seealso:: @@ -2002,12 +2014,16 @@ * - 現在の実装では、組み込み数値型 :class:`int`, :class:`long` およ び :class:`float` は型強制を行いません; - 一方、 :class:`complex` は上記のルールと異なり、2項演算と拡張比較のために 型強制を使います。 - こうした違いは、これらの型をサブクラス化する際に顕在化してきます。そのう ち、 - :class:`complex` 型についても型強制を避けるよう修正されるかもしれません。 これらの型は全て、関数 :func:`coerce` から + 現在の実装では、組み込み数値 型 :class:`int`, :class:`long`, :class:`float` + および :class:`complex` は型強制を行いません; + これらの型は全て、関数 :func:`coerce` から 利用するための :meth:`__coerce__` メソッドを実装しています。 + .. versionchanged:: 2.7 + + 複素数型は、型混合の二項算術演算に :meth:`__coerce__` を + 暗示的に呼び出さなくなりました。 + .. _context-managers: