問題タブ [isinstance]

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 に答える
247 参照

python - Pythonでは、isinstanceに相当する静的なものはありますか?

モジュールをスキャンして(を使用して) 、特定の親クラスを拡張するクラスのdir()すべてのクラス名(オブジェクト)を抽出したいと思います。type最初に確認できるインスタンスを作成せずにこれを行う方法はありますisinstance()か?

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

python - IDとデータベース行の異種リストを処理するpythonicの方法は何ですか?

私の状況では、ユーザーがデータベースからレコードを削除できる関数を作成しています。効率を高めるために、関数自体がバッチ削除の引数のリストを取得できる必要があります。さらに、簡単にするために、リストには ID (stringsまたはints)または行オブジェクト (栄光化されたdicts)のいずれかを含めることができます。

興味がある方のために説明すると、本格的な行を許可する理由は、ユーザーが問題の行を削除できることを確認するために行データを検査するセキュリティ チェックがあるためです。行の受け渡しを許可すると、データベースへのトリップを減らすことができます。

現在、私はしばしば非難さisinstanceれる関数を次のように使用しています。

これが危険である理由はわかります ( or ではない id に型を強制できる場合はどうなるでしょうintbasestring?)、しかし、何らかの方法で isinstance を含まないよりクリーンなソリューションを見つけることができません。 、または実際のコードに関連する場合と関連しない場合がある例外に依存しています。

問題は、python でこれを行う最も効果的な方法は何ですか? または、代わりに、呼び出し元をこれだけ赤ちゃんにすることは、災害のレシピにすぎません。つまり、パラメーターが強制するタイプのリストint または行のリストのいずれかであることを要求する必要がありますか?

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

python - isinstance または同様の型チェックを、ピクルス化されたクラスで動作させることは可能ですか?

本当に厄介なバグがあり、ついに追跡しました。

スタンドアロン スクリプトを使用して (より正確には、既に使用しています)、オブジェクトのストアを作成した後、このデータ構造をピクルします。その後、プログラムを実行するたびに、デシリアライズされたデータでメイン プログラムを初期化できます。

ただし、型チェックを使用すると、これが問題になります。pickle.dump() を実行してこのデータ構造を取得した後、オブジェクトのタイプをチェックするように設定しました。残念ながら、私がチェックできる唯一のことは、クラスの新しいリロードであり、Python はこれを別個のものとして認識します。

DEBUG: Object I am type-checking: >> Fixture {name: 'Front Desk', location: '0', desc: 'The front desk has a sign that read...'} <<
DEBUG: 一般的なゲームオブジェクト: >> ゲームオブジェクト {name: '', location: 'None', desc: '...' } <<

(オブジェクト表現が非常に似ていることがわかります。これは、一方__repr__が他方から継承するためです。つまり、オブジェクトのインスタンスである必要があります。)

DEBUG: タイプチェックしているオブジェクトのタイプ: {class 'chimai.chimai.objects.fix.Fixture'}
DEBUG: ジェネリック GameObject のタイプ: {class 'objects.game_object.GameObject'}
DEBUG: オブジェクト I' の MRO m type-checking: ({class 'chimai.chimai.objects.fix.Fixture'}, {class 'chimai.chimai.objects.game_object.GameObject'}, {type 'object'})
DEBUG: ジェネリック GameObject の MRO : ({class 'objects.game_object.GameObject'}, {type 'object'})

(GameObject クラスの識別子はわずかに異なります。これは、最初にスタンドアロン スクリプトを実行した場所に由来します。)

DEBUG: pickled フィクスチャ タイプの ID: 173671604
DEBUG: メイン プログラムでリロードされたフィクスチャ タイプの ID: 149507748

最終結果は、ピクルス化されたデータを型チェックする方法がまったく思いつかないということです。誰かが天才的な提案を持っていない限り、私はダックタイピングになると思います.

0 投票する
3 に答える
3065 参照

python - 候補をインポートせずに isinstance

関数、文字列、コンパイルされた正規表現、Hamcrest Matcherなど、さまざまなタイプの入力を受け取り、入力のタイプに基づいてリストを適切にフィルタリングする関数があります。

現在は を使用していますisinstance(our_filter, hamcrest.matcher.Matcher)が、これには Hamcrest をインストールする必要があります。

で文字列一致を使用することを検討していますinspect.getmro(type(POSSIBLE_MATCHER))。しかし、これは不潔に感じます。import ステートメントの前後にtry/を含むオプションがある場合もあります。except

最善のアプローチは何ですか?


@dblslash の助けを借りて、これは私がこれまでに得た最高のものです。

[x.__module__+"."+x.__name__ for x in inspect.getmro(type(POSSIBLE_MATCHER))] ['hamcrest.core.core.isequal.IsEqual', 'hamcrest.core.base_matcher.BaseMatcher', 'hamcrest.core.matcher.Matcher', 'hamcrest.core.selfdescribing.SelfDescribing', '__builtin__.object']

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

python - Python 2.7 isinstance が動的にインポートされたモジュール クラスで失敗する

現在、モジュール クラスの拡張をサポートするために、ある種の小さな API を作成しています。ユーザーは自分のクラス名を構成に書き込むだけで、プログラムで使用できるようになります。create(**kwargs)クラスのモジュールには、基本モジュール クラスのインスタンスを返すために呼び出される関数があり、特別なフォルダーに配置されるという契約があります。ただし、インポートが動的に行われるとすぐに isinstance チェックが失敗します。

モジュールは lib/services/ nameに配置されます

モジュール基本クラス (lib/services/service 内)

サンプル モジュール クラス (lib/services/ping 内)

インポート機能

呼び出しコード

私は一体何を間違っているのですか

これは圧縮された小さな例です。test.py引数なし で抽出して実行するだけです。