ホームページ  >  記事  >  バックエンド開発  >  Pythonのデータ型判定型とisinstanceの違い

Pythonのデータ型判定型とisinstanceの違い

高洛峰
高洛峰オリジナル
2016-10-19 14:39:051808ブラウズ

プロジェクトでは、各インターフェイスでクライアントから渡されたパラメータのタイプを検証します。検証に失敗した場合は、「パラメータ エラー」エラー コードがクライアントに返されます。

これにより、デバッグが容易になるだけでなく、堅牢性も向上します。クライアントは不正行為を行う可能性があるため、クライアントから渡されたパラメータを安易に信用しないでください。

type 関数を使用して型を検証します。これは非常に簡単に使用できます。たとえば、

>>type('foo') == str

True

>>type(2.3) in (int, float)

True

型を決定するためにType()があるのに、なぜisinstance()があるのでしょうか?

明らかな違いは、サブクラスの判断にあります。

type() は、サブクラスを親クラスの型とはみなしません。

isinstance() は、サブクラスを親クラス型とみなします。

千の言葉は一ヤードの価値があります。

class Foo(object):
    pass
    
class Bar(Foo):
    pass
    
print type(Foo()) == Foo
print type(Bar()) == Foo
print isinstance(Bar(),Foo)
   
class Foo(object):
    pass
   
class Bar(Foo):
    pass
   
print type(Foo()) == Foo
print type(Bar()) == Foo
print isinstance(Bar(),Foo)
输出
True
False
True

古いスタイルのクラスと新しいスタイルのクラスでは type() の結果が異なることに注意してください。昔ながらの授業は全部です。

class A:
    pass
    
class B:
    pass
    
class C(object):
    pass
    
print 'old style class',type(A())
print 'old style class',type(B())
print 'new style class',type(C())
print type(A()) == type(B())
   
class A:
    pass
   
class B:
    pass
   
class C(object):
    pass
   
print 'old style class',type(A())
print 'old style class',type(B())
print 'new style class',type(C())
print type(A()) == type(B())
输出
old style class <type &#39;instance&#39;>
old style class <type &#39;instance&#39;>
new style class <class &#39;__main__.C&#39;>
True

インスタンスが型よりも優れているということはありません。どちらがニーズに適しているかだけです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。