問題タブ [abc]
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のabcモジュールとプロパティを使用してメンバー変数にアクセスできません
abc
モジュールとの使用をシミュレートするコードを作成しましたproperties
。width
しかし、height
変数にアクセスできなかったようです。コードは次のとおりです。
取得したエラーメッセージはですNameError: name 'width_setter' is not defined
。私の実装で何が間違っている可能性がありますか?
編集:
python - 「より良い」__repr__()を持つこの抽象基本クラスは危険ですか?
__repr__()
クラスのデフォルトがあまり有益ではないことは私を悩ませます:
...だから私はそれを改善する方法を考えてきました。pickle
少し検討した後、プロトコルの__getnewargs__()
メソッドを活用するこの抽象基本クラスを思いつきました。
その使用法の簡単な例を次に示します。
...そして結果として生じるrepr()
振る舞い:
これで、Pythonがデフォルトでこれをすぐに行わない理由の1つがわかります。すべてのクラスにメソッドを定義するように要求することは、メソッド__getnewargs__()
を定義することを期待する(ただし要求しない)よりも負担が大きくなります__repr__()
。
私が知りたいのは、それはどれほど危険で壊れやすいのかということです。一方で、Repro
インスタンスにそれ自体が含まれている場合、無限の再帰が発生することを除いて、ひどく間違っている可能性のあるものは考えられません...しかし、上記のコードを醜くするという犠牲を払って、それは解決可能です。
他に何を逃しましたか?
python - 暗黙的な型変換を使用したポイント演算の実装
Function
そのインスタンスが 1 つの引数を取る callable であるclassがあるとします。これらのクラスの点ごとの演算を簡単な方法で定義しました。これが私のコードの簡略化されたバージョンです(実際には and でより複雑な動作をし__init__
て__call__
いますが、この質問には関係ありません):
暗黙の型変換を許可しようとすると行き詰まります。たとえば、次のように書けるようになりたいです。
言い換えれば、インスタンスv
の隣の算術式で数値オブジェクトを見るたびに、 に変換しFunction
たいと思います。v
Function(lambda x : v)
さらに、いくつかのユーザー定義型に対して同様の動作を実現したいと考えています (繰り返しますが、Function
オブジェクトを使用した同じバイナリ算術式でそれらを見るたびに)。
このロジックは、通常の二項算術演算子と反映された二項算術演算子のブルート フォースの組み合わせを使用してコード化できますが、それぞれisinstance(v, numbers.Number)
とをチェックしisinstance(v, MyUserDefinedType)
ますが、もっと洗練された方法があると思います。
また、私のデザインで他に改善点があれば教えてください。(Function
オブジェクトはめったに作成されませんが、非常に頻繁に呼び出されるため、パフォーマンスが重要です。)
編集:
@Eric のコメントに対処するには、別のユーザー定義クラスがあることを明確にする必要がありますFunctional
。
Function
同じ算術式で aとインスタンスの両方が表示される場合、メソッドを使用するように暗黙的に変換しFunctional
たいと考えています。Function
Functional
Functional.from_function
したがって、暗黙の型変換階層は次のようになります。
- 機能的
- 関数
- 他に何か
そして、特定の算術式で見られるこの階層の最上位の型に暗黙的に変換したいと思います。
python - Python の継承、メタクラス、および type() 関数
次のコードが特定の方法で動作する理由を理解できません。これについては、以下で説明します。
なぜそうrepr(MyClass2)
言うabc.MyClass2
のですか(ちなみにこれは真実ではありません)?ありがとうございました!
python - @abstractproperty と @abstractmethod を使用した実装/オーバーライドの実際の違い
後続の各サブクラスでオーバーライドする関数を持つ抽象基本クラスを検討してください。abc モジュールと ABCMeta を使用します。デコレーターによって指定されたタイプの関数を作成するために実装するサブクラス/開発者を使用して装飾する@abstractproperty
か、@abstractmethod
実際に強制しますか? 私の実験から、メソッドで抽象プロパティをオーバーライドし、サブクラスのプロパティで抽象メソッドをオーバーライドできます。
この考えは間違っていますか?
python - abc.abstractmethod + プロパティ
ドキュメントによると、結合@property
して機能@abc.abstractmethod
するはずなので、python3.3で次のように機能するはずです。
実装をテストします。
したがって、明らかにプロパティではありません。そのように機能するはずだからです。
たぶん私は愚かなのか、単にうまくいかないのか、誰かがアイデアを持っていますか?
python - 親ファイルからサブクラス変数にアクセスする
別のファイルでインスタンス化された親クラスからサブクラス変数にアクセスする方法を探しています。例えば
ベースファイル.py:
実装ファイル.py:
私が実行すると:
私は 0 を取得します。私は 10 を取得したいです。
親クラスと実装クラスの両方が同じファイルにある場合、これは明らかに問題ではありませんが、それらが必要ないプロジェクト構造があります。
モジュールが役立つかもしれないと思いますabc
が、それを使った私の実験はこれまでのところ無益であることが証明されています.