Pythonでは、isinstance()
関数を使用してオブジェクトが特定のクラスのインスタンスであるかどうかを確認できます。しかし、この関数はオブジェクトがクラスのサブクラスのインスタンスである場合もTrueを返します。
では、オブジェクトが特定のクラスのインスタンスであるが、そのサブクラスのインスタンスではないことをどのように確認できるでしょうか?
以下のコードスニペットは、この問題を解決する一つの方法を示しています:
def instance_but_not_subclass(obj, klass):
return type(obj) is klass
この関数は、オブジェクトの型が指定されたクラスと厳密に一致する場合にのみTrueを返します。これにより、オブジェクトがクラスのサブクラスのインスタンスである場合はFalseを返すことができます。
このテクニックは、Pythonの動的型付けの特性を活用しています。Pythonでは、すべてのオブジェクトはその型情報を保持しており、type()
関数を使用してアクセスできます。この情報は、オブジェクトが生成された時点でのクラスを示しており、サブクラスの情報は含まれていません。
したがって、isinstance()
関数とこのカスタム関数を組み合わせることで、Pythonのオブジェクトが特定のクラスのインスタンスであるか、またはそのサブクラスのインスタンスであるかを正確に判断することができます。
この情報がPythonの型システムを理解し、コードをより効果的に書くのに役立つことを願っています。