3

以前は整数を返す関数を含むライブラリがありましたが、代わりに、定義した「フィールド」クラスのオブジェクトを返します。このライブラリを使用するスクリプトとの互換性を維持するために、このクラスが可能な限り整数に近い動作をするようにしたかったintのですが、値を可変にする必要があるため拡張できませんでした。そこで、関数が通常の整数を返さなくなったことに誰も気付かないことを期待して__int__()__add__()、などを定義しました。__radd__()ただし、いくつかの組み込み関数で「TypeError: 'field' オブジェクトを整数として解釈できません」が発生するため、これは私の計画どおりにはなりませんでした。(など。)クラスを「整数として解釈」できるhex()ように、これについてできることはありますか?

なぜこの変更が必要なのか疑問に思っている方のために説明すると、私が言及した__getitem__()関数は、これらの「フィールド」のコレクションを表す別のクラス (「ブロック」) の関数です。「ブロック」のオブジェクトは、などの式を評価するlocalsための引数として使用され、これらの式でフィールドの他のプロパティを使用できるようにしたかったのです。eval()field1 + field2

4

1 に答える 1

6

メソッドを追加し、クラスに含まれる(または) 値__index__(self)を返すことで、多くの Python のビルトインで受け入れられるようになります。intlongfield

于 2013-06-27T13:21:55.403 に答える