python-isinstanceとtypeの使い方と違い

2607 ワード

pythonでは、isinstanceとtypeの2つの内蔵関数を使って変数がある組み込みタイプに属しているかどうかを判断することがよくありますが、私はずっと両者の違いを理解していません.いつどれを使うべきか分かりません.今日はシステムで勉強して、まず両者のそれぞれの使い方をまとめて、それから両者の違いをまとめました.
一.isinstance
1.フォーマット
isinstance(object,type-or-tuple-or-class) -> bool
2.作用
オブジェクトがクラスまたはサブクラスのインスタンスであると判断します.
3.パラメータ紹介
1番目のパラメータ(object)はオブジェクト、2番目のパラメータ(type)はタイプ名(int...)またはタイプ名のリスト((int,list,float)はリストです).戻り値はブール(True or flase)です.
詳細:
(1)2番目のパラメータがtype-or-tupleの場合
2番目のパラメータに個別のタイプが1つしかない場合、オブジェクトのタイプがパラメータ2のタイプと同じであればTrueを返します.2番目のパラメータが1つのタプルタイプである場合、オブジェクトタイプがタプルのタイプ名の1つと同じである場合、Trueが返されます.
# coding=UTF-8
>>> a = 4
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list))#         
True
>>> isinstance(a,(str,list,float))#         
False

(2)2番目のパラメータがclassの場合
# coding=UTF-8
class A(object):
    pass
>>>a=A()
>>>isinstance(a,A)
True

二.type
1.フォーマット
type(object)--タイプ
2.作用
受信したobjectのタイプを取得
三.比較
1.共通点
typeもisinstanceも変数が組み込みタイプに属するかどうかを判断できます
2.相違点
(1)typeは1つのパラメータのみを受信し、変数があるタイプに属するか否かを判断するだけでなく、パラメータ変数が未知の属するタイプを得ることができる.isinstanceは既知のタイプに属するかどうかを判断するだけで、変数の未知の属するタイプを直接得ることはできません.
# coding=UTF-8
class A(object):
    pass
>>>a=A()
#type            
>>>type(a)==A
True
#type      
>>>type(a)
 __main__.A
#isinstance              
>>>isinstance(a,A)
True

(2)isinstanceは、サブクラスインスタンスオブジェクトが親に属すると判断することができる.typeは、サブクラスインスタンスオブジェクトと親タイプが異なると判断します.
# coding=UTF-8
class father(object):
    pass
class son(father):
    pass
>>>a=father()
>>>b=son()
>>>isinstance(a,father)
True
>>>type(a)==father
True
>>>isinstance(b,father)#isinstance            
True
>>>type(b)==father#type             
 False

以上より、isinstanceとtypeの適用シーンは異なる.typeは主に未知の変数を取得するためのタイプisinstanceであり、主にAクラスがBクラスに継承されているか否かを判断するために用いられる
四.知識点の延長
注意したいのは、fatherクラス定義時にobjectを継承する必要があります.そうしないと、typeで親インスタンスが親クラスに属しているかどうかを判断する結果はFalseです.
# coding=UTF-8
class father():
    pass
class son(father):
    pass
>>>a=father()
>>>b=son()
>>>isinstance(a,father)
True
>>>type(a)==father#    :type             Flase
False
>>>isinstance(b,father)
True
>>>type(b)==father
False
>>>type(a)
instance

上记の原因はclassとclass(object)の区别で、具体的な区别は后の文章の中で引き続き讨论します
以上、isinstanceとtypeの使い方と区別について学習しました