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

c++ - *あなた*は C++ ABC コンストラクターを何に使用しますか?

ここの人々は、フィールドで C++ 抽象基本クラス コンストラクターを何に使用しますか? 私は、データ メンバーも非純粋な仮想メンバーも持たない純粋なインターフェイス クラスについて話しています。

ABC コンストラクターを有用な方法で使用するイディオムを誰かが示すことができますか? それとも、ABC を使用して、空、インライン、および保護されたままのインターフェイスを実装するという性質に固有のものなのでしょうか?

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

struts - ストラット 2.1.6 の ONGL

ONGLでStruts 2.1.6を使用しています。<td>以下のコードを見て、幅、高さ、bgcolor などのタグ付けするプロパティを 3 行目と 4 行目でどこに定義すればよいか教えてください。

1) s:form action="Login">
2) <table>
3) <tr><s:textfield key="username"/></tr>
4) <tr><s:password key="password" /></tr>
5) </table>
6)</s:form>

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

c++ - 「ほぼ空」のクラスとは何ですか?

次のクラスをコンパイルします

を使用してgcc -fdump-class-hierarchy

gcc発する

「ほぼ空」の意味は何ですか?どういう意味ですか?

0 投票する
5 に答える
1648 参照

c++ - 仮想関数を呼び出すときの継承されたクラスの「無効なポインター エラー」

以下のコードでわかるように、抽象基本クラス "HostWindow" と、そこから派生するクラス "Chrome" があります。すべての機能は Chrome で実装されています。問題は、仮想の場合、Chrome で関数を呼び出せないことです。

たとえば、Chrome のインスタンスがあり、いくつかの関数を呼び出すとします。

仮想関数を呼び出すたびに発生するヌル ポインター エラーは次のとおりです。

プログラムは信号 EXC_BAD_ACCESS を受信しました。メモリにアクセスできませんでした。理由: アドレス: 0x00000008 の KERN_PROTECTION_FAILURE

何が起こっているのか分かりますか?

更新: 多くの人が指摘したように、このコードは実際に実行されます。残念ながら、コードは WebCore (WebKit) の奥深くにあるため、これ以上完全な例を提供することはできません。しかし、私は問題を絞り込みました。Chrome インスタンスを手動で作成すると、仮想関数の呼び出しが機能します。したがって、問題はこの特定のクロム インスタンスにあり、適切にインスタンス化できません。これで、Chrome インスタンスは別のクラスのコンストラクターでインスタンス化されます。さらに調べてみます…

更新 2: 問題のあるインスタンスの vtable を調べると、それが null であることがわかります。GDB から:

通常のインスタンスには正しい vtable があります。では、なぜ vtable が nil なのかを解明する必要があります。どうしてそうなったのだろうか? 他のクラスのコンストラクターでインスタンス化されているためでしょうか。

更新 3: 別のクラスのコンストラクター内でのインスタンス化であるという問題について、私は正しいようです。

したがって、インスタンス化前は次のようになります。

m_chrome は無効なインスタンスであり、vtable はありません。インスタンス化を変更したので、変数が初めて必要になったときに発生します (これには、後で使用するために ChromeClient を保存する必要があります)。

これで、Page::chrome() インスタンスが適切な vtable を備えた正しいインスタンスになりました。かなり奇妙です!

更新 4: 最後の更新、約束します :)。わかりましたので、正確に特定しました。Page コンストラクターの本体でインスタンス化すると、vtable を使用して正しいインスタンスを取得できます。Page コンストラクターのヘッドでインスタンス化すると、vtable がありません。コンストラクターの頭で実行できる変数設定の種類に制限はありますか? それは別の Stackoverflow の質問だと思います。

とても役に立ってくれてありがとう。

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

c++ - C++ で複数のクラスが使用するクラスを設計する場合、API/ABC を使用する必要がありますか?

以前に設計した 3 つのクラス (A、B、および C) で使用されるクラス X を追加しようとしています。

新しいクラス X には、新しい機能のためのデータと関数が含まれているだけでなく、それを使用して下位層を非表示にするクラスにサービスを提供します。問題は、A、B、および C がクラス X をまったく異なる方法で使用することです。つまり、異なる機能を使用することです。

私の質問は、新しいクラス X に API (または C++ の抽象基本クラス) を提供する必要があるかどうかです。その API は、X クラスごとにするか、A、B、および C クラスごとにする必要がありますか? API は、それを実装するクラスよりも、その呼び出し元により密接に関連している場合があることをどこかで読んだことがあります。呼び出し元ごとに 1 つの API を提供すると、API には特定の呼び出し元が必要とする関数のみが含まれます。

それとも、通常の C++ クラスを作成し、呼び出し元が A、B、および C のそれぞれで X のパブリック関数のサブセットを使用できるようにする必要がありますが、「技術的には」それらすべてを使用できますか? クラス X の機能が変更される可能性はほとんどなく、X と同様のクラスを作成する必要もありません。

オブジェクト指向プログラミングに完全に精通しているわけではない場合、クラスにインターフェイス/API を提供する理由の 1 つは、別のサブクラスを追加してもインターフェイス/API を使用するコードを変更する必要がないためです。これは、呼び出し元がインターフェイスで動作するためです。名前を付け、動的バインディングを使用して正しいサブクラス タイプを解決します。

ご不明な点がありましたらお知らせください。できる限り迅速にお答えできるよう努めます。

ありがとう、

トーマス

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

python - Pythonで抽象基本クラスを使用する理由

私はPythonでのダックタイピングの古い方法に慣れているため、ABC(抽象基本クラス)の必要性を理解できません。ヘルプはそれらを使用する方法について良いです。

PEPで理論的根拠を読み込もうとしましたが、頭を悩ませました。可変シーケンスコンテナを探していた場合は、それをチェックする__setitem__か、おそらくそれを使用しようとします(EAFP)。ABCを使用する数値モジュールの実際の使用法に出くわしたことはありませんが、それは私が理解しなければならない最も近いものです。

誰かが私に理論的根拠を説明できますか?

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

python - collections.Iteratorをサブクラス化するにはどうすればよいですか?

ABCのドキュメントによると、nextサブクラス化できるようにメソッドを追加する必要がありcollections.Iteratorます。したがって、私は次のクラスを使用しています。

ただし、インスタンス化しようとするとエラーが発生します。

私は愚かなことをしていると思いますが、それが何であるか理解できません。誰かがこれに光を当てることができますか?メソッドを追加することはできました__next__が、Cクラス専用の印象を受けました。

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

python - Python:Python<2.6でabcを使用する

古いバージョンのPython(2.6より古い)のabcの実装を知っている人はいますか?

編集:たとえば、ABCMetaやabstractmethodと同じことを、同じインターフェイスで実行するスニペットを探しています。実際には、コードの一部を下位互換性のあるものにする必要があります。

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

python - Python:特殊な型を作成するためのサブクラス `type`(例:「intのリスト」)

type特殊な型を作成できるクラスを作成するために、サブクラス化しようとしています。例ListType

ただし、これListOfIntがインスタンスの作成に使用されることはありません。他のタイプと比較するために操作できるインスタンスとして使用するだけtypeです...特に、私の場合、入力のタイプに応じて適切な操作を検索する必要があり、次のタイプが必要です。より多くの精度が含まれています(list of intまたはXML stringなど)。

だからここに私が思いついたものがあります:

上記のコードでは、の使用法はabc明らかではありません...ただし、上の例のようにサブクラスを記述したい場合はListType、便利になります...

基本的な機能は実際に機能します:

しかし、tがのインスタンスであるかどうかを確認しようとするとSpzType、Pythonがおかしくなります:

何が起こっているのかを調べたpdb.pm()ところ、次のコードでエラーが発生することがわかりました。

変 ?!明らかに議論があります...それで、それはどういう意味ですか?何か案が ?誤用しましたabcか?

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

django - 同じコードベースのdjangoMTI、ABC、またはEAVを介した10のサイト

私はこの1年で進化しているdjangoベースのウェブショップを持っています。現在、同じコードベースに加えてAPIを実行している国固有のショップが約8つあり、まもなくB2B Webサイトが作成され、さらにいくつかの国がリストに追加されます。

モデル構造には、特に住所モデルや勘定モデルなどのフィールドの周りにバリエーションが必要です。

さらに複雑なことに、サイトはマルチデータベースを実行しており、各ショップインスタンスは別々のデータベースにあります。したがって、ベースABCモデルがある可能性がある状況があります。例:

次に、アプリ全体をコーディングして、正しいモデルを選択します。

countrysettings.countryは、実際にはthreading.localをサブクラス化する別個の設定クラスであり、settings.DATABASESのキーにも対応する国コードは、ジオロケーションミドルウェアハンドラーによって構成されます。したがって、正しいデータベースが選択され、モデル固有のバリエーションが各国のデータベースに反映されます。

しかし、このアプローチには問題があります。

  1. ./manage.pyをハックして、ミドルウェアに設定する代わりに国のdbを渡すことができない限り、syncdbを完全に破壊し、南には適していません。

  2. 散らかっているようです。countrysettings.country == "xx"の場合はこれだけです:コードがうそをついている、そして非常に多くのサブクラス化されたモデル。

そのため、代わりにdjango-eavを使用することを考えていましたが、管理者、特にフィールドの順序に問題があると予想しています。django-eavがeavフィールドを含む管理者用のモデルフォームを作成することは知っていますが、理想的には、国に関連してこれらを表示または非表示にする必要があります。

また、Addressなどの抽象化されていない基本クラスを用意し、必要に応じて国固有のバリエーションを作成することも検討しました(Model Table Inheritanceなど)。しかし、その後、各モデルバリアントに対してone2oneフィールドでベースモデルが過負荷になると予測します。しかし、それは管理者の問題を解決するでしょう。

別のオプションとして、追加のデータフィールドを用意し、追加のフィールドをjsonやcsvなどにシリアル化して、このフィールドに保存することもできます。