0

SageObject から継承する Sage クラスがあります。Pythonのドキュメントによると、

ユーザー定義のクラスには、デフォルトでメソッド__cmp__()とメソッドがあります。__hash__()それらを使用すると、すべてのオブジェクトが等しくなく (それ自体を除く) 比較され、x.__hash__()が返されますid(x)

__hash__ただし、独自のメソッドを実装していないという事実にもかかわらず、私のクラスはこれを行いません。代わりに、文字列表現のハッシュ値 (__str__メソッドによって返されるもの) を使用します。これは Sage クラスの設計の一部であり、通常の Python クラスとは異なるものですか? 許容できるハッシュ値を見つけるために Sage が調べる場所の階層はありますか?

4

1 に答える 1

1

幸いなことに、あなたは実際に質問に自分で答えました。??ソースコードを見つけるためのトリックを試してください。

sage: SageObject.__hash__??
Type:       wrapper_descriptor
Base Class: <type 'wrapper_descriptor'>
String Form:    <slot wrapper '__hash__' of 'sage.structure.sage_object.SageObject' objects>
Namespace:  Interactive
Definition: SageObject.__hash__(self)
Source:
    def __hash__(self):
        return hash(self.__repr__())

そうです、それはこれらのほとんどのことに対して意図的です。ハッシュに別のものを実装したい場合は、できると思います。これが貢献に興味があり、何かと競合する可能性があると思われるコードであるかどうか、Sage リストの 1 つで質問する価値があります。

于 2012-05-26T02:17:24.737 に答える