プロジェクトでは、各インターフェイスでクライアントから渡されたパラメータのタイプを検証します。検証に失敗した場合は、「パラメータ エラー」エラー コードがクライアントに返されます。
これにより、デバッグが容易になるだけでなく、堅牢性も向上します。クライアントは不正行為を行う可能性があるため、クライアントから渡されたパラメータを安易に信用しないでください。
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 'instance'> old style class <type 'instance'> new style class <class '__main__.C'> True
インスタンスが型よりも優れているということはありません。どちらがニーズに適しているかだけです。