問題タブ [python-datamodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
470 参照

inheritance - メタクラスでクラスの親クラスを取得するには?

次のスクリプトがあります。

次の出力が得られます。

しかし、私はそれを期待しています:

どこで間違えますか?

0 投票する
4 に答える
891 参照

python - 無限シーケンスとして機能するオブジェクトの __len__ の適切な戻り値

不変の無限シーケンスとして機能する python クラスを作成しています。

このクラスは、ジェネレータを使用してこの無限シーケンスにアクセスするのではなく、メソッド内のアルゴリズムに従って、シーケンス内の任意のインデックスの値を生成します__getitem__

__len__そのようなオブジェクトのメソッドを処理する最良の方法は何なのか興味があります。理想的には、私はそのまま戻っfloat("inf")てき__len__ます。ただし、バックグラウンドでlen()オブジェクトのメソッドを呼び出す関数には、ある程度特定の値が必要です。__len__

__len__float("inf") または decimal.Decimal("Infinity") を返すように設定されている場合len()、TypeError を発生させて拒否します。また、シーケンスが無限であることを意味する "-1" の値も拒否します。さらに、たまたま以前に書いた無限クラスを使ってみたところ、実際にから継承されintlen()何らかの理由で 0 が返されました。

値を「0」にすることは大きな不便ではありませんが、このようなクラスは非常に珍しいものですが、クラスの長さ属性を処理する良い方法はありますか?それは無限のシーケンスですか?

0 投票する
3 に答える
663 参照

python - 実装されていない __init__()

関数のスペルが間違っているコードを調べて__init__()いました (アンダーバーが 4 つではなく合計 3 つありました)。そして、オブジェクトが適切な__init__().

自動的に挿入されるデフォルトの初期化子はありますか? __new__呼び出されるデフォルトはありますか? 引数を持つコンストラクターが失敗するのはなぜですか?

0 投票する
1 に答える
325 参照

python - Counter の __init__ メソッドが記述子と呼ばれるのはなぜですか?

私は Counter クラスの __init__ メソッドを読んでいて、これを見ました:

記述子が何を意味するのかわからなかったので、Pythonデータモデルのドキュメントを確認したところ、次のことがわかりました。

一般に、記述子は「バインディング動作」を持つオブジェクト属性であり、その属性アクセスは記述子プロトコルのメソッドによってオーバーライドされています: __get__()、__set__()、および __delete__()。これらのメソッドのいずれかがオブジェクトに対して定義されている場合、それは記述子と呼ばれます。

これらのメソッドはいずれもクラス定義に存在しないようですが、なぜ __init_ は記述子と呼ばれるのでしょうか?

0 投票する
2 に答える
14986 参照

python - Python - クラス __hash__ メソッドとセット

クラスのメソッドを使用してset()、セットに同じハッシュ オブジェクトを追加しないようにしています。python data-model documentによると、同じハッシュオブジェクトを同じオブジェクトと見なし、それらを一度追加するだけです。__hash__pythonset()

ただし、次のように動作が異なります。

文字列値の場合は正しく動作します。

私の質問は、なぜ同じハッシュオブジェクトがセット内で同じでないのですか?

0 投票する
1 に答える
331 参照

python - サブクラスの Python マジック メソッドを「未定義」にするにはどうすればよいですか?

クラスがその親クラスがサポートするいくつかの操作をサポートしていないことを示す方法が Python 3 にありますか?* クラスが に設定__hash__Noneて、型がハッシュ不可能であることを示すことができることは知っていますが、これは一般的には機能しないようです。

たとえば、__len__メソッドを持つコレクション クラスがあり、サイズが定義されていない無制限のコレクションを表す子クラスを作成したいとします。サブクラスに設定__len__するNoneと、コレクションの長さを取得しようとすると、醜い/混乱するエラーメッセージが表示されます。

Dまったく定義されていないかのようにエラーが発生したいと思い__len__ます。

この質問は関連していますが、私の質問は特にマジックメソッド/演算子のオーバーロードに関するものです。Python のマジック メソッドはオブジェクトの型で直接検索されるため、オーバーライド__getattribute__や記述子の使用などのいくつかの可能なアプローチは、ここでは機能しません。

*注: これがLiskov の置換原則に違反することはわかっていますが、型の安全性が必要な場合は、そもそも Python を使用していません。;)