問題タブ [setattr]
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 リスト/タプル変数にメタ情報/クラスを追加する簡単な方法が必要ですか?
全て、
簡単なメタ情報をリスト オブジェクトに含める必要があります。以下のコードを参照してください。
私の質問は
リストにはすでに「 setattr」関数が含まれている必要があるため、変数「a」に setattr() を使用できないのはなぜですか?
' setattr ' をオーバーロードしたり、そのリストを dict に埋め込んだりする代わりに、リスト/タプル変数にメタ情報を添付する簡単な方法はありますか?
ありがとう!
python - setattr() が設定されていません
私は属性「健康」を持つクラス(ボット)を持っています。このクラスには多くのパラメーターがあり、ユーザーに多くのパラメーターを入力してもらいたいので、{param:explanation} の dict をループして、パラメーターごとに設定する値を入力することにしました。
したがって、print attr, getattr... 行は (サンプル) "health 50" を返しますが、print str 行は "0 hp" を返します。これが起こる理由はありますか?
python - 文字列によるプロパティの設定
setattr(self, item, value)関数を使用して、クラス外の Python クラス プロパティを設定しようとしています。
別のスクリプトでは、インスタンスを作成し、プロパティを指定して、プロパティ ミューテータに単純な検証を処理させたいと考えています。
問題は、 setMyProperty(self, value) mutatorを呼び出しているように見えないことです。呼び出されないことを確認する簡単なテストのために、ミューテーターを次のように変更します。
私はPythonにかなり慣れていないので、おそらく私がやろうとしていることを別の方法で行うことができますが、setattr(self, item, value)が呼び出されたときにミューテーターが呼び出されない理由を誰かが説明できますか?
文字列を介してプロパティを設定する別の方法はありますか? プロパティ値を設定するときに、ミューテーター内の検証を実行する必要があります。
python - クラススコープ内の動的インスタンス変数
SQLAlchemyの宣言型ベースの子孫であるクラスがあります。宣言型ベースと実行中の別のシステムの間で変換されるブリッジオブジェクトを作成する必要がありますが、ブリッジオブジェクトがレコード内の列を正確に認識している必要がないようにする必要があります。その場合、レコード内のすべての列を一覧表示し、漠然と関連する2つの場所でのみ属性の一覧を維持する必要をなくし、その間のレプリケーションを最小限に抑える方法が必要です。これは、列属性を作成してから、列名の個別のリストを維持できることを意味しますが、繰り返しになりますが、レプリケーションが要因です。後でこの構造を変更したい場合は、両方の場所で変更する必要があります。
その場合、私はdictに列定義を貼り付けてから、dictを繰り返し処理して、次のようにsetattrを使用して各列定義を作成することを考えました。
さて、ここにこすりがあります:クラスレベルでこのコードを貼り付けると、selfはまだ定義されておらず、エラーが発生します(これは理にかなっています)。これを貼り付けると__init__
、selfが定義されますが、クラスの定義が完了するまでにテーブルに主キーがないため、SQLAlchemyの宣言型ベースでエラーが発生します(これらの属性は実行時まで設定されないため、これは理にかなっています) )。
つまり、すべてのことを言っても、evalを使用せずに必要なものを取得するにはどうすればよいですか、またはevalを使用しているのはここでの唯一のオプションですか?
編集:私は以下の解決策を受け入れましたが、それを100%使用しませんでした(それは私に答えを得るのに絶対に役立ちましたが)。これが私がやったことです:(DeclarativeMetaはsqlalchemy.ext.declarativeの一部であり、declarative_baseと同じパッケージであることに注意してください)
次に、私の派生クラスでは、
python - Python:関数__setattr__を定義する方法に矛盾がありますか?
このコードを考えてみましょう:
私は同じ出力を期待します。ただし、CPython 2.5、2.6(3.2でも同様)を使用すると、次のようになります。
PyPy 1.5.0を使用すると、期待どおりの出力が得られます。
「正しい」出力はどれですか?(または、Pythonのドキュメントによると出力はどうあるべきですか?)
これがCPythonのバグレポートです。
python - Pythonで実行時にプロパティを作成するにはどうすればよいですか?
だから私は自分がやりたいことが可能かどうかを考えようとしています。アプリケーションのテストコードを作成していますが、製品のインターフェイスにある要素の一部を表すプロパティを含むオブジェクトがあります。私がやりたいのは、アプリケーションランナーとデータオブジェクトを新しいクラスに渡し、データオブジェクトのプロパティのサブセットに基づいてアクセサープロパティのセットを動的に生成できるようにすることです。これまでの私の考え:
- インターフェイスから追加情報を抽出するために必要なメタデータを含むプロパティのサブクラスを作成します
- 既存のデータオブジェクトをリファクタリングして、UIの関連フィールドに新しいプロパティサブクラスを使用します
- UIドライバーオブジェクトとデータオブジェクトを受け入れる新しいジェネレータークラスを作成します。
- データオブジェクトを反映して、新しいプロパティサブクラスタイプのすべてのメンバーのリストを取得します
- プロパティサブクラスのメタデータに基づいてUIからジェネレータークラスインスタンスのメンバーに情報を格納します(使用を計画しています
setattr
) - 実行時にプロパティを作成して、(b)で作成されたメンバーを読み取り専用にし、既存のコードと整合性のあるインターフェイスを提供します(つまり、
.[name]
の代わりにを使用します.[name]()
)
ステップ3cを除いて、すべてがわかったと思います。実行時にプロパティを動的に作成する方法はありますか?どんな助けでも大歓迎です。
python - Pythonでgetattr/setattrを使用してリストアイテムにアクセスする
Pythonでgetattr関数とsetattr関数を使用してリスト内のアイテムにアクセス/割り当てようとしています。残念ながら、リスト名とともにリストインデックス内の場所を渡す方法はないようです。
これがいくつかのサンプルコードでの私の試みのいくつかです:
また、attr関数の2番目の引数では、この関数で文字列と整数を連結できないことに注意してください。
乾杯
python - Python: setattr で割り当てられた属性とともにオブジェクトのインスタンスを返す方法
私はまだ python に非常に慣れていませんが、一連の python モジュール (誤って "モジュール" として識別した場合に備えて .py ファイル) として記述されたソフトウェアとやり取りする必要があります。このプログラムには、非常に便利で複雑な機能がいくつかあります。私は実際にハッキングすることはできません (ソフトウェアを更新するたびに、すべてを再ハッキングする必要があるためです)。
次のようなpythonスクリプトがあります。
次に、試してみると:
その後、最初に割り当てられたが割り当てられていないresult
すべての属性の値が正しく含まれます( )thingfromsoftware
result.dimensions
has no attribute "dimensions"
目標は、半一貫性のある方法でによって計算および構成されたdimensions
すべての を格納することです。result
myfunctionthing
実際のコード (ご要望に応じて)
python - Python の新しいスタイルのクラスで __setattr__ と __getattribute__ を適切にオーバーライドするにはどうすればよいですか?
__getattribute__
Python のクラスと__setattr__
メソッドをオーバーライドしたいと考えています。私の使用例は通常のものです。処理したい特別な名前がいくつかあり、それ以外はデフォルトの動作が必要です。について__getattribute__
は、 を上げるだけでデフォルトの動作を要求できるようですAttributeError
。しかし、どうすれば同じことを達成でき__setattr__
ますか? これは、不変フィールド「A」、「B」、および「C」を持つクラスを実装する簡単な例です。
疑問符の代わりに何が入りますか? 古いスタイルのクラスでは、答えは明らかself.__dict__[name] = value
に でしたが、ドキュメントによると、新しいスタイルのクラスではこれが間違っていることが示されています。
python - setattr()とobject .__ setattr __()の違いは何ですか?
object.__setattr__
から継承されていないオブジェクトを呼び出すことはできないことは知っていますがobject
、他に何か違いはありますか?これが重要な場合、私はPython2.6で作業しています。