3.3.7 数値型をエミュレーションする
以下のメソッドを定義して、数値型オブジェクトをエミュレートすることがで
きます。特定の種類の数値型ではサポートされていないような演算に対応する
メソッド (非整数の数値に対するビット単位演算など) は、未定義のままにし
ておかなければなりません。
-
__floordiv__( |
self, other) |
__pow__( |
self, other[, modulo]) |
- これらのメソッドは、二項算術演算 (
+
, -
, *
, //
, %
,
divmod(),
pow(), **
, <
<
,
>
>
, &
, ^
, |
)
を実現するために呼び出されます。例えば、式 x+
y
の場合、x が __add__() メソッドをもつクラスのインスタン
スであれば、x.__add__(y)
が呼び出されます。
__divmod__() メソッドは、__floordiv__() と
__mod__() を使った場合と等価にならなければなりません;
__truediv__() (下記参照) と関連づける必要はありません。
組み込みの三項演算子バージョンの関数
pow() をサポートする場合には、
__pow__() は、オプションとなる第三の引数を受け取れなくては
なりません。
-
__truediv__( |
self, other) |
- 除算演算 (
/
) は、これらのメソッドで実現されています。
__truediv__() は、 __future__.division
が有効であると
きに使われます。それ以外の場合には __div__() が使われますs。
二つのメソッドのうち一方しか定義されていなければ、オブジェクトは
他方の演算コンテキストをサポートしなくなります; このとき、
TypeError が送出されます。
-
__rtruediv__( |
self, other) |
__rfloordiv__( |
self, other) |
-
__rdivmod__( |
self, other) |
__rlshift__( |
self, other) |
__rrshift__( |
self, other) |
- これらのメソッドは二項算術演算
(
+
,
-
, *
, /
, %
,
divmod(),
pow(), **
, <
<
,
>
>
, &
, ^
, |
)
を実現しますが、メソッド呼び出しが行われ
る被演算子が逆転して (reflected, swapped: 入れ替えられて) います。
これらの関数は、左側の被演算子が対応する演算をサポートしていない場合に
のみ呼び出されます。例えば、x-
y において、
y が __rsub__() メソッドを持つクラスのインスタンスであ
る場合、y.__rsub__(x)
が呼び出されます。三項演算子
pow() が __rpow__() を呼ぶことは
ないので注意してください (型強制の規則が非常に難解になるからです)。
-
__itruediv__( |
self, other) |
__ifloordiv__( |
self, other) |
-
__ipow__( |
self, other[, modulo]) |
__ilshift__( |
self, other) |
__irshift__( |
self, other) |
- これらのメソッドは、累算算術演算 (augmented arithmetic operations,
+=
, -=
, *=
, /=
, %=
,
**=
, <
<=
, >
>=
, &=
,
^=
, |=
) を実現するために呼び出されます。
これらのメソッドは、演算をその場で(self を変更する形で)
行うよう試み、その結果(変更された self またはその代わり
のもの)を返さなければなりません。
特定のメソッドが定義されていない場合、その累算算術演算は通常のメソッド
で代用されます。例えば、x+=
y を評価する際、
x が __iadd__() メソッドを持つクラスのインスタンスで
あれば、x.__iadd__(y)
が呼び出されます。反対に、
x が __iadd() メソッドを持たないクラスのインスタンスで
あれば、x+
y に基づいて
x.__add__(y)
および
y.__radd__(x)
を考慮します。
-
- 単項算術演算 (
-
,
+
, abs() および ~
)
を実現するために呼び出されます。
-
- 組み込み関数
complex(),
int(), long(),
および float() を実現するために呼び出さ
れます。適切な型の値を返さなければなりません。
-
- 組み込み関数
oct() および
hex()を実現するために呼び出されます。文字列型を返さなければなりません。
-
``型混合モード (mixed-mode)'' での数値間の算術演算を実現するために
呼び出されます。 self と other を共通の数値型に変換して、
2 要素のタプルにして返すか、不可能な場合には
None
を返さなけれ
ばなりません。共通の型が other
の型になる場合、 None
を
返すだけで十分です。この場合、インタプリタはもう一方のオブジェクトを調
べて型強制を行おうとするからです (とはいえ、もう一方の値の型が実装上変
更できない場合には、ここで self を other の型に変換してお
いた方が便利です)。戻り値に NotImplemented
を使うのは、
None
を返すのと同じです。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。