1. ホーム
  2. python

[解決済み] オブジェクトの種類を決定しますか?

2022-03-17 04:12:32

質問

変数がリストなのかディクショナリーなのか、それともそれ以外なのかを判断する簡単な方法はありますか?私は、どちらかのタイプである可能性があるオブジェクトを取得し、私は違いを見分けることができるようにする必要があります。

どのように解決するのですか?

オブジェクトのタイプを識別するのに役立つ2つの組み込み関数があります。使用できるのは type() はオブジェクトの正確な型が必要な場合、そして isinstance() から チェック オブジェクトの型と何かを照合します。通常は isinstance() これは非常に堅牢で、型継承もサポートしているからです。


オブジェクトの実際の型を取得するには、組み込みの type() 関数があります。唯一のパラメータとしてオブジェクトを渡すと、そのオブジェクトの型オブジェクトを返します。

>>> type([]) is list
True
>>> type({}) is dict
True
>>> type('') is str
True
>>> type(0) is int
True

もちろん、これはカスタムタイプでも有効です。

>>> class Test1 (object):
        pass
>>> class Test2 (Test1):
        pass
>>> a = Test1()
>>> b = Test2()
>>> type(a) is Test1
True
>>> type(b) is Test2
True

なお type() はオブジェクトの即時型を返すだけで、型継承については教えてくれません。

>>> type(b) is Test1
False

それをカバーするために isinstance 関数を使用します。もちろん、これは組み込み型にも有効です。

>>> isinstance(b, Test1)
True
>>> isinstance(b, Test2)
True
>>> isinstance(a, Test1)
True
>>> isinstance(a, Test2)
False
>>> isinstance([], list)
True
>>> isinstance({}, dict)
True

isinstance() は、派生型も受け入れるため、オブジェクトの型を保証する方法として通常推奨されています。そのため、(何らかの理由で)実際に型オブジェクトが必要でない限りは isinstance() よりも優先されます。 type() .

の第2パラメータは isinstance() も型のタプルを受け付けるので、一度に複数の型をチェックすることができます。 isinstance は、オブジェクトがこれらの型のいずれかである場合、true を返します。

>>> isinstance([], (tuple, list, set))
True