問題タブ [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.

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

python - 組み込み型の仮想サブクラスになることは可能ですか?

ユーザー定義型をPythonの組み込み型の仮想サブクラスにすることは可能ですか? クラスを のサブクラスと見なしたいのですがint、次のように直接継承したくありません。

それ以来、私が望むかどうかにかかわらず、私のクラスは事実上不変になります。たとえば、__iadd__andのようなメソッドを使用できなくなるため、それ自体を変更する方法がありません__isub__intから継承することもできnumbers.Integralますが、誰かが呼び出すとisinstance(myIntObj, int)issubclass(MyInt, int)答えは になりますFalse。ABCMeta のメタクラスを持つクラスは、このメソッドregisterを使用してクラスを実際には継承しない仮想ベースクラスとして登録できることを理解しています。組み込み型でこれを行う方法はありますか? 何かのようなもの:

私は(Pythonのドキュメントと一般的にオンラインの両方で)見回しましたが、探しているものに近いものはまだ見つかりませんでした。私が求めているのは完全に不可能ですか?

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

python - Python 2.6から3.5で具象初期化子を使用してPython ABCを作成するには?

コンテキスト

比較的複雑なクラス階層を持つ Python アプリケーションがあります。python 2.6 から python 3.5 までで動作する必要があり (広い範囲です!)、私は ABC で特に問題を抱えていました。私はsixライブラリを使用してwith_metaclassいくつかの傷を和らげていますが、それでも問題があります。

ある特定のクラスのセットで問題が発生しています。単純化した形式で表示すると、次のようになります。

には多くのgamma同様の関数がバンドルされておりMyABC、 や のようないくつかのサブクラス固有の関数がalphaありbetaます。のすべてのサブクラスが同じ属性と属性MyABCを継承し、独自の特定の特性を積み上げたいと考えています。__init__gamma

問題

問題は、MyChild1とのMyChild2コードを共有するには__init__MyABC具体的な初期化子が必要なことです。Python 3 ではすべて正常に動作していますが、Python 2 ではイニシャライザが具象のTypeErrors場合、インスタンス化時に get に失敗しますMyABC

私のテストスイートには、次のようなセグメントがあります

どういうわけか、Python 2.7 (私は 2.6 を想定していますが、チェックする気にはなりませんでした) では、このテストは失敗しています。

MyABCには他の抽象プロパティはありませんが、またはgammaも持たずに を持つクラスをインスタンス化しても意味がありません。今のところ、 と で関数を複製するだけで DRY 違反を回避できていますが、時間が経つにつれて、これはますます負担になってきています。alphabeta__init__MyChild1MyChild2

Python 3 の互換性を維持しながら、Python 2 ABC に具体的なイニシャライザをインスタンス化可能にせずに与えるにはどうすればよいですか? MyABCつまり、Python 2 と Python 3 で sをスローするようにインスタンス化を試みたいのですTypeErrorが、Python 3 でしかスローしません。

with_metaclass

ここのコードを見るのは適切だと思いwith_metaclassます。これは、プロジェクトの既存のライセンスおよび著作権に基づいて提供されsixます。(c) 2010-2014 Bejamin Peterson

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

python - pylint と abc - 抽象メソッド

プロパティが Human の派生クラスに必要であることを明確にしたいと思いderived_configます。このプロパティを設定しない派生クラスのコードは実行されないという意味で、抽象プロパティ デコレーターがトリックを行います。

ただし、pylint は次のエラーで失敗します。

注意:

  • pylintは抽象プロパティに対して不平を言いませんが、パターンは同じです (ターミナル リーフであるimplementation_configことを除いて)。OneHandedClown
  • クラス変数 implementation_config を削除すると、pylintは文句を言いますOneHandedClown

pylint-disable継承コントラクトが明示的であることを確認するために抽象プロパティを使用すると同時に、使用せずに lint が確実に通過するようにするにはどうすればよいですか?

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

python - Python で抽象基本クラスをインスタンス化できるのはなぜですか?

私が理解しているように、 Python でabcモジュールを使用して、インスタンス化できない抽象クラスを作成できます (他の優れたプロパティの中でも)。これを使用して、アプリケーションのさまざまな終了コードを表すクラスの階層を作成しようとしましたExceptionが、基本クラスをインスタンス化することはできますが、それを望んでいません。問題を示すコードを次に示します。

ExitCodeExceptionインスタンス化できないという例外でプログラムが終了することを期待していましたが、代わりに、ExitCodeException抽象的でない場合に期待する標準のスタックトレースを取得するだけです。

どうすればこれを修正できますか?

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

python - 継承されたクラスで抽象クラスのデコレーターをオーバーライドする

だからここに私が持っているものがあります:

抽象クラス:

継承クラス:

基本的に、さまざまなクラスで使用される一般的なデータ メソッド (DataWrapper で定義) がたくさんあります。デコレータを定義して、返される前にデータに対して前/後処理を実行できるようにします。これは、DataWrapper でプレースホルダーとして定義されています。

残念ながら、継承されたクラスでデコレータを定義しようとしても、デコレータはオーバーライドされません。つまり、「ここ」は印刷されていません。

これを見て、継承されたクラスにオーバーライドデコレータを追加しようとしましたが、エラーはありませんが、「ここ」はまだ出力されていません。

誰にも提案はありますか?