Python には type() と isinstance() という 2 つの型判定関数があります。
type() を使用する
まず、オブジェクト タイプを決定し、type() 関数を使用します。
基本的な型は type() で判断できます:
>>> type(123) <type 'int'> >>> type('str') <type 'str'> >>> type(None) <type 'NoneType'>
変数が関数またはクラスを指している場合、type() で判断することもできます:
>>> type(abs) <type 'builtin_function_or_method'> >>> type(a) <class '__main__.Animal'>
しかし、 type() 関数の戻り値は? type についてはどうですか? type タイプを返します。
isinstance() の使用
クラスの継承関係の場合、type() を使用するのは非常に不便です。クラスのタイプを決定するには、 isinstance() 関数を使用できます。
最後の例を確認してみましょう。継承関係が次の場合:
object -> Animal -> Dog -> Husky
次に、 isinstance() はオブジェクトが特定の型であるかどうかを知ることができます。まず 3 種類のオブジェクトを作成します。
>>> a = Animal() >>> d = Dog() >>> h = Husky()
次に、判断します。
>>> isinstance(h, Husky) True
h 変数は Husky オブジェクトを指しているため、問題はありません。
判定:
>>> isinstance(h, Dog) True
h 自体は Husky 型ですが、Husky は Dog から継承されているため、h も Dog 型です。つまり、 isinstance() は、オブジェクトがその型自体であるか、その型の親継承チェーン上にあるのかを判断します。
したがって、h はまだ動物タイプであると確信できます:
>>> isinstance(h, Animal) True
同様に、実際のタイプが Dog である d も動物タイプです:
>>> isinstance(d, Dog) and isinstance(d, Animal) True
ただし、 d は Husky 型ではありません :
>>> isinstance(d, Husky) False
type() で判定できる基本型は isinstance() でも判定できます:
>>> isinstance('a', str) True >>> isinstance(u'a', unicode) True >>> isinstance('a', unicode) False
そして変数かどうかも判定できます次のような特定の型の 1 つです。コードを使用して、str か unicode かを判断できます。
>>> isinstance('a', (str, unicode)) True >>> isinstance(u'a', (str, unicode)) True
str と unicode は両方とも Basestring から継承されるため、上記のコードを次のように単純化することもできます。
#>>> isinstance(u'a', basestring) True
型を決定する type() があるのに、なぜ isinstance() があるのでしょうか?明らかな違いの 1 つは、サブクラスの判断にあります。 type() は、サブクラスを親タイプとはみなしません。 isinstance() は、サブクラスを親クラス型とみなします。
以上がオブジェクトの種類を確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。