問題タブ [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 投票する
6 に答える
2840 参照

python - Pythonイントロスペクション:オブジェクト属性の「ソートされていない」リストを取得するには?

次のコード

出力

これらのクラスがコードで定義された順序で出力するにはどうすればよいですか? いえ

inspect.getsource(A) を使用して解析する以外に方法はありますか?

0 投票する
6 に答える
706 参照

python - 属性であり、メソッドであるディレクトリにリストされている属性とメソッドのリストを見ると、どのようにわかりますか?

私はPythonでのプログラミングの学習に取り組んでおり、Standardやその他のモジュールの使用方法をよりよく理解することに重点を置いています。dir関数はインタプリタでは非常に強力に見えますが、OOPのバックグラウンドがないために何かが足りないのではないかと思います。S.Lottsの本を使用して、私は彼のDieクラスを使用して、構文とクラスおよびインスタンスの使用についてさらに学ぶことにしました。

元のコードは次のとおりです。

私はそれを見て、いくつかのインスタンスを作成した後、単語の値が何らかの形でキーワードであるかどうか、クラスステートメントでの単語オブジェクトの使用は何をするのか疑問に思ったので、クラス定義を次のように変更して調べることにしました。

この変更により、インスタンスから同じ動作が得られたが、dirを実行したときにインスタンスから次のメソッド/属性が欠落していることがわかりました。

また、インスタンスでdirを実行したときに、追加のキーワード禁止があり、それがインスタンスの属性であることが最終的にわかったことがわかりました。これは、 d1.banを使用してインスタンスの値にアクセスできることを理解するのに役立ちました。これが属性であることがわかった唯一の理由は、d1.happyと入力して、 AttributeErrorを取得 したことです。d1.GetValueはDieにアタッチされたメソッドであることがわかりました。これは、インタープリターが教えてくれたものだからです。

したがって、BeautifulSoupのような複雑で役立つモジュールを使用しようとしているときに、dir(instance)と入力した後、リストされているもののどれがインスタンスの属性またはインスタンスのメソッドであるかを知るにはどうすればよいですか。この突っ込みは、属性を使用してメソッドの結果を呼び出し、メソッドを使用してインスタンスで関数を呼び出すことを教えてくれたので、これを知る必要があります。

この質問はおそらく言葉が多すぎますが、属性とメソッドの違いをよりよく理解するのに役立ちました。具体的には、Dieクラスのインスタンスでdirを呼び出した結果を見ると、次のことがわかります。

したがって、試行錯誤やhasattr(myInstance、suspectedAttributeName)の入力に頼ることなく、属性でありメソッドであるリストを確認することは有用であるように思われます。

質問を投稿した後、私は試しました

これは、厳密に言えば、すべてのメソッドが属性であることを示しています。しかし、 ()なしでメソッドを呼び出すことはできないので、hasattr()は誤解を招くように思われます。

0 投票する
7 に答える
2396 参照

python - __getattribute__ を実装する場合、仮パラメータにアクセスする方法はありますか

__getattribute__パラメータが 2 つしかないようです(self, name)

ただし、実際のコードでは、インターセプトしているメソッドが実際に引数を取ります。

これらの引数にアクセスする方法はありますか?

ありがとう、

チャーリー

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

python - Python/IronPythonオブジェクトメソッドをループする

Pythonオブジェクトのメソッドをループして呼び出す適切な方法は何ですか?

オブジェクトが与えられた場合:

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

python - Pythonでオブジェクトの親名前空間を取得していますか?

Python では「.」を使用できます。オブジェクトの辞書項目にアクセスするため。例えば:

上記の例から、「a」オブジェクトを持っている場合、割り当てられた「foo」メソッドの親名前空間である「obj」への参照を取得することは可能ですか? たとえば、obj.b を 2 に変更するには?

0 投票する
6 に答える
64211 参照

python - メソッドを定義したクラスを取得

Python でメソッドを定義したクラスを取得するにはどうすればよいですか?

__main__.FooClass次の例で " "を出力したいと思います。

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

python - リスト(データ構造)に適用される乗算演算子

「Python プログラミング」の入門書であるHow to think like a computer scientistを読んでいます。

*リストに適用されたときの乗算演算子 ( ) の動作を明確にしたいと思います。

関数make_matrixを考えてみましょう

実際の出力は

make_matrixの正しいバージョンは次のとおり です。

make_matrixの最初のバージョンが失敗する理由(本の 9.8 で説明されているように) は、

...各行は他の行のエイリアスです...

なぜだろう

原因...各行は他の行のエイリアスです...

だがしかし

つまり、行のそれぞれ[0]が他の行要素のエイリアスではない理由です。

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

python - Python でリストをトラバースするときに要素を削除する

Java では、次のように、 を使用してからイテレータIteratorのメソッドを使用して.remove()、イテレータによって返された最後の要素を削除できます。

Pythonでこれを行うにはどうすればよいですか? リストを for ループで繰り返し処理している間、リストを変更することはできません。これは、内容がスキップされるためです (こちらを参照)。Iteratorまた、Javaのインターフェイスに相当するものはないようです。

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

php - CakePHP の第 3 レベルの関係に基づくデータのクエリ

次の関係を設定しています。

ここで、特定の A に対して、B が付加されたすべての C が必要です。私は SQL クエリを書くことができますが、適切な CakePHP の方法は何ですか? どのモデルで、どのパラメーターを使用してどのメソッドを呼び出すか?

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

python - 難読化された MultiplierFactory を解読してください

今週の comp.lang.python では、Steven D'Aprano が、宿題の質問に対するジョークの答えとして、 「興味深い」コードを投稿しました。ここにあります:

twiceそれが答えと同等であることはわかっています。

名前からMultiplierMultiplierFactoryコードが何をしているのかはわかりますが、正確な内部構造についてはわかりません。まず単純化しましょう。

論理

not factor is not None is Trueは と同等でnot factor is not None、これもfactor is Noneです。結果:

今までは簡単でした:)

属性アクセス

もう 1 つの興味深い点は、好奇心旺盛なfactorアクセサーです。

の初期化中にMultiplierFactoryself.__factorが設定されます。しかし後で、コードは にアクセスしself.factorます。

次に、次のように思われます。

正確に " self.__factor" を実行しています。

この方法で常に属性にアクセスできますか?

関数シグネチャの動的変更

とにかく、この時点で、簡略化されたコードは次のとおりです。

コードはほとんどきれいになりました。唯一の不可解な行は、おそらく次のとおりです。

そこには何がありますか?datamodel docを調べたところ、func_defaultsデフォルトを持つ引数のデフォルトの引数値を含むタプル、または引数にデフォルト値がない場合は None 」であることがわかりました。ここで引数のデフォルト値を変更しているだけ ですか? factor __init__ 結果のコードは次のようになります。

つまりMultiplier、デフォルト パラメータなしで呼び出されることはないため、デフォルト値を動的に設定することは役に立たないノイズでした。

そして、おそらく次のように単純化できます。

正しい?

そして、「これは本当の質問ではない」と急いでいる人のために...もう一度読んでください、私の質問は太字+斜体で表示されています