iResourceというインターフェイスクラスと、それぞれが「request」メソッドを実装するいくつかのサブクラスがあります。リクエスト関数は他のマシンへのソケットI/Oを使用するため、それらを非同期で実行することは理にかなっています。これにより、他のマシンが並行して動作できるようになります。
問題は、iResource.requestを使用してスレッドを開始し、最初の引数としてサブクラスを指定すると、スーパークラスメソッドが呼び出されることです。最初の引数として「type(a).request」と「a」で開始しようとすると、type(a)の値として「」が返されます。それが何を意味するのか、そしてメソッドの真のタイプを取得する方法について何かアイデアはありますか?どういうわけかPythonで抽象メソッドを正式に宣言できますか?
編集:コードを含みます。
def getSocialResults(self, query=''):
#for a in self.types["social"]: print type(a)
tasks = [type(a).request for a in self.types["social"]]
argss = [(a, query, 0) for a in self.types["social"]]
grabbers = executeChainResults(tasks, argss)
return igrabber.cycleGrabber(grabbers)
「executeChainResults」は、callableのリスト「tasks」とargs-tuplesのリスト「argss」を取り、それぞれがリストを返すことを前提としています。次に、それぞれを別々のスレッドで実行し、結果のリストを連結します。必要に応じてそのコードを投稿できますが、問題はないので、とりあえず省略します。
オブジェクト「a」は、例外をスローする単一のコンストラクターを持っているため、iResourceタイプではありません。ただし、「type(a).request」を「iResource.request」に置き換えると、基本クラスのメソッドが呼び出されます。さらに、 "self.types ["social "] [0] .request"を呼び出すことは直接正常に機能しますが、上記のコードは次のようになります。 "typeobject'instance'には属性'request'"がありません。
コメントされた行のコメントを解除すると、<type 'instance'>
数回印刷されます。