問題タブ [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.
python - Python stdメソッドの階層呼び出しが文書化されていますか?
dictの「type」サブクラス化で問題が発生しました。私は__iter__メソッドをオーバーライドし、値を取得するために__iter__メソッドを呼び出すと信じていたため、iterkeys、keysなどの他のメソッドに影響を与えると予想しましたが、それらは独立して実装されているようで、すべてをオーバーライドする必要があります。
これは、他のメソッドを使用せず、値を個別に取得するバグまたは意図ですか?
標準クラスのメソッド間の呼び出しの依存関係に関する標準のPythonドキュメントの説明には見つかりませんでした。サブレーザー作業やオリエンテーションには、適切な動作のためにオーバーライドする必要のあるメソッドが便利です。Pythonの基本タイプ/クラスの内部に関する補足ドキュメントはありますか?
python - __ne__ は __eq__ の否定として実装する必要がありますか?
__eq__
メソッドをオーバーライドしたいクラスがあります。__ne__
メソッドもオーバーライドする必要があるのは理にかなっているようです。__ne__
それ自体の否定として実装する必要__eq__
がありますか、それとも悪い考えですか?
python - python __getattr__ ヘルプ
本を読んで、このコードに出くわしました...
やりたいことはできますが、クラスの__getattr__
機能がわかりません。クラスManager
から他のすべての属性を委任することを知っています。Person
しかし、私はそれがどのように機能するかを理解していません。たとえば、なぜPerson
クラスから?はっきり言ってないから。person(module は Person(class) とは異なります
どんな助けでも大歓迎です:)
python - Pythonデータモデルドキュメント:バインドされていないユーザー定義のメソッドオブジェクトとクラスメソッドオブジェクト
リファレンスのデータモデルでは、ライターはユーザー定義のメソッドがどのように作成および操作されるかを説明するために多くの労力を費やしました:( http://docs.python.org/reference/datamodel.html#the-standard-type-hierarchyおよびrollを参照)下)
ユーザー定義メソッドオブジェクトは、その属性がユーザー定義関数オブジェクト、バインドされていないユーザー定義メソッドオブジェクト、またはクラスメソッドである場合、クラスの属性を取得するときに(おそらく、そのクラスのインスタンスを介して)作成できます。物体。属性がユーザー定義のメソッドオブジェクトである場合、新しいメソッドオブジェクトは、それが取得されるクラスが元のメソッドオブジェクトに格納されているクラスと同じであるか、その派生クラスである場合にのみ作成されます。それ以外の場合は、元のメソッドオブジェクトがそのまま使用されます。
では、バインドされていないユーザー定義メソッドオブジェクトとクラスメソッドオブジェクトの違いは何ですか?
python - Python Data Model : classmethod と再び混同
それは言われています:
クラス メソッド オブジェクトを生成する場合、im_class 属性と im_self 属性の両方が C であるバインドされたユーザー定義メソッド オブジェクトに変換されます。
参照で
そしてEXをしました。
現象を理解するのは難しくありません。しかし残念なことに、リファレンスでは、im_self は im_classと同じである必要があると書かれています。矛盾をどう説明する?
python - Python:元の'オブジェクト'クラスが再定義されました。'object'クラスを元に戻す方法は?
SquishAutomationToolにPython言語を使用しています。このツールは、いくつかのカスタムオブジェクトと関数でPythonを拡張します。これは彼らがマニュアルで言っていることです:
SquishのPython固有の拡張モジュールは、次のステートメントに相当するものを内部的に実行することによって自動的にロードされます。
つまり、独自のスタンドアロンモジュールを開発しているのでない限り、それらを自分でインポートする必要はありません。
そうすることで、 (これに対して)自動的に再定義object
されるため、(のような)新しいスタイルのクラスを実行しようとするとエラーが発生します。class NewClass(object):
TypeError:メタクラスベースを呼び出すときにエラーが発生しました。
module.__init__()
最大で2つの引数を取ります(3つ与えられます)
だから私はobject
取り戻そうとしています。メタクラスに関するすばらしい記事を読んだ後object
、次のコードで取得しようとしています。
object
私の質問は、元のクラスから継承するのと同じですか?
更新:Python 2.4の使用に制限されています(それが重要な場合)
ありがとう!
python - Python属性検索プロセスはどのように機能しますか?
「python 属性ルックアップ プロセス」と言うとき、つまり x.foo と書くと python は何をしますか??
Web を検索しても、これに関するドキュメントはあまり見つかりませんでした。見つかった最高の論文の 1 つは、次の手順へのプロセスを再開しました (完全な記事はこちらで参照できます) 。
- attrname が objectname の特別な (つまり、Python が提供する) 属性である場合、それを返します。
- attrname の objectname.__class__.__dict__ を確認してください。存在し、データ記述子である場合は、記述子の結果を返します。objectname.__class__ のすべてのベースで同じケースを検索します。
- objectname.__dict__ で attrname を確認し、見つかった場合は戻ります。objectname がクラスの場合、そのベースも検索します。それがクラスであり、記述子がそのクラスまたはそのベースに存在する場合、記述子の結果を返します。
- attrname の objectname.__class__.__dict__ を確認してください。存在し、非データ記述子である場合は、記述子の結果を返します。存在し、記述子ではない場合は、それを返します。それが存在し、データ記述子である場合、ポイント 2 で戻ってきたので、ここにいるべきではありません。objectname.__class__ のすべてのベースで同じケースを検索します。
- AttributeError を発生させます。
最初はこれが正しいように思えるかもしれませんが、属性のルックアップ プロセスはもう少し複雑です。たとえば、x.foo の場合、x がクラスまたはインスタンスの場合は同じように動作しません。
この方法では説明できないサンプルがいくつか見つかりました。次の Python コードを検討してください。
次に、対応する出力で次の行を確認します。
私が行った結論は次のとおりです(x.fooを検索していることを考慮して):
- __getattribute__ は、< type 'type' > と < type 'object' > のインスタンスでは異なります。C.foo() の場合、C.__dict__ で最初に 'foo' が検索され、(type(C) を検索する代わりに) 見つかった場合に返され、x.foo() の場合、type(x).__dict__ で 'foo' が検索され、 x.__dict__ で。
- __getattribute__ メソッドは常に type(x) で解決されます。ここで理解できないのは最後のケースです: c.__getattribute__、オブジェクトにはメソッド __getattribute__ が含まれていません (そして C はオブジェクトから継承されます)。呼ばれた。
誰かがこれを説明できますか?? または、これに関するドキュメントがどこにあるのか教えてください。ありがとうございます。
python - Pythonでデコレータに渡される関数のファイル名を取得するにはどうすればよいですか?
装飾されている関数の元のファイル/スクリプト名などを取得したい。どうやってやるの?
使ってみfn.__code__
ましたが、必要なものが増えました。その文字列を解析して関数名を取得することはできましたが、よりエレガントな方法があるかどうか疑問に思っていました
python - メソッド内でメソッドを定義したクラスを取得する
Python でメソッドを定義したクラスを取得するにはどうすればよいですか?
例えば
b.__class__ は常に b の実際のクラス (つまり B) であるため、メソッドを実際に定義したクラス (つまり A) が必要なので、self.__class__ は役に立ちません。