14

簡単な質問があります。クラスのインスタンスを格納する 2D 配列があります。配列の要素には、プログラムで以前に読み取られたテキスト ファイルに基づいて特定のクラスが割り当てられます。ファイルを調べないと特定の要素にどのクラスが格納されているかわからないため、そのインデックスに存在しないフィールドを参照できます (temp のインスタンスがそのインデックスに格納されている場合の外観を参照します)。私はこれをテストする方法を思いつきましたが、それは長く続き、2 番目のマトリックスが必要です。クラス内のフィールドの存在をテストする関数はありますか?

class temp():
   name = "default"

class temp1():
   appearance = "@"
4

3 に答える 3

38

hasattr(x, 'foo')xオブジェクトに属性があるかどうか(クラスから取得するかどうか)をチェックする組み込みのバイナリ関数x.fooです。これは、あなたが求めているものに近いようです。あなたが求めていることが実際にあなたが求めるべきものであるかどうかは別の問題です - @Eli答えが示唆するように、あなたのデザインは奇妙に思えます。ただし、これは尋ねられたとおりに質問に答えます。

于 2010-04-20T05:41:39.263 に答える
3

何方をお探しですか:

isinstance(オブジェクト、クラス情報)

object 引数が classinfo 引数のインスタンス、またはその (直接または間接の) サブクラスのインスタンスである場合、true を返します。また、classinfo が型オブジェクト (新しいスタイルのクラス) であり、object がその型またはその (直接的または間接的な) サブクラスのオブジェクトである場合にも true を返します。object がクラス インスタンスでも指定された型のオブジェクトでもない場合、関数は常に false を返します。classinfo がクラス オブジェクトでも型オブジェクトでもない場合、それはクラス オブジェクトまたは型オブジェクトのタプルであるか、他のそのようなタプルを再帰的に含んでいる可能性があります (他のシーケンス型は受け入れられません)。classinfo がクラス、型、またはクラスのタプル、型、およびそのようなタプルでない場合、TypeError 例外が発生します。

あなたがやろうとしていることは何でも良い考えのようには思えません。元のニーズをより詳細に説明してください。より良いデザインを考え出すお手伝いをいたします。

于 2010-04-20T05:39:19.660 に答える
1

これを行うために例外処理を使用することもできます。

try:
    val = x.name
except AttributeError:
    val = x.appearance
于 2010-04-20T05:44:30.160 に答える