Pythonのisinstanceを使ってオブジェクトのクラスを判別する方法

スポンサーリンク
スポンサーリンク

イントロダクション

この記事では、Pythonのisinstance()メソッドについて説明します。

ユーザーは、あるオブジェクトが特定のクラスのインスタンスであるかどうかを判断する必要がある場面に遭遇することがあります。

Pythonはこれを調べるために isinstance() という名前のメソッドを用意しています。

さっそく、このメソッドを理解しましょう。

Python isinstance() の基礎知識

Pythonの isinstance() メソッドはその名の通り、あるオブジェクトが特定のクラスのインスタンスであるかどうかをチェックする組み込みのメソッドです。

では、isinstance() メソッドを使用するための構文を見てみましょう。

構文は以下の様な感じです。

isinstance( object_name , class_name)

ここで

  • オブジェクト名` は、あるクラスのインスタンスであるかどうかをチェックする必要があるオブジェクトです。
  • class_name は、そのオブジェクトが属するかどうかを確認する必要があるクラスです。
  • isinstance() メソッドは object_name が class_name のインスタンスであれば true を返し、そうでなければ false を返します。

Python isinstance() の例

さて、これでPythonの isinstance() メソッドの基本的な定義と構文が終わりました。

では、このメソッドがどのように動作するかをより良く理解するために、いくつかの例を見てみましょう。

1. Pythonのネイティブクラスでisinstance()を使用する

では、int, float, str, list, dict, tuple などの Python のネイティブクラスに対して isinstance() メソッドを使用するとどうなるか見てみましょう。

i=10
f=55.55
s="Python"
l=[1,2,3,4,5]
d={0:"n", 1:"y"}
t=(1,2,3,4)
print("isinstance(i,int)=",isinstance(i,int))
print("isinstance(f,int)=",isinstance(f,float))
print("isinstance(s,int)=",isinstance(s,str))
print("isinstance(l,int)=",isinstance(l,list))
print("isinstance(d,int)=",isinstance(d,dict))
print("isinstance(t,int)=",isinstance(t,tuple))

出力されます。

class dt:
    dd=10
    mm=2
    yyyy=2002
 
class tm:
    hr=12
    min=56
    sec=34
#instance creation
a=dt()
b=tm()
 
#check is a is instance of dt class
print("a is instance of dt?",isinstance(a,dt))
#check is a is instance of tm class
print("a is instance of tm?",isinstance(a,tm))
#check is b is instance of tm class
print("b is instance of tm?",isinstance(b,tm))
#check is b is instance of dt class
print("b is instance of dt?",isinstance(b,dt))

ここで何が起こっているかを理解しましょう。

  • まず、異なる型の変数をいくつかの値で初期化しています。
  • その後、それらが対応するクラスのインスタンスであるかどうかをチェックします。そして、予想通り、すべてのチェックで正の出力、つまり、trueが得られました。

2. ユーザー定義クラスで isinstance() を使用する

では、いくつかのクラスとそのインスタンスを作成して、目的の出力が得られるかどうか、また、その場合に isinstance メソッドがどのように機能するかを確認してみましょう。

class dt:
    dd=10
    mm=2
    yyyy=2002
 
class tm:
    hr=12
    min=56
    sec=34
#instance creation
a=dt()
b=tm()
 
#check is a is instance of dt or tm class
print("a is instance of dt or tm?",isinstance(a,(dt,tm)))
#check is b is instance of dt or tm class
print("b is instance of dt or tm?",isinstance(b,(dt,tm)))

出力されます。

a is instance of dt or tm? True
b is instance of dt or tm? True

このコードでは

  • 日付と時刻を表す2つのクラス dttm を作成します。
  • その後、両クラスからそれぞれ a と b という名前のオブジェクトを作成します。
  • そして、オブジェクト a と b が dttm クラスのインスタンスであるかどうかをチェックします。いろいろな組み合わせを使って、オブジェクトが指定したクラスのインスタンスでない場合にどうなるかを説明します。
  • 見てわかるように、このコードでは a と b はそれぞれ dt と tm クラスのインスタンスであることが確認されています。
  • しかし、a と b がそれぞれ tm と dt クラスのインスタンスであるかどうかを確認しようとすると、 instance() メソッドは false を返します。つまり、逆です。

3. 複数のクラスに対する isinstance() の使用

Python の isinstance() メソッドは、あるオブジェクトが与えられたクラスのうちのどれかのクラスのインスタンスであるかどうかをチェックしたい場合の手段も提供します。

この場合、必要なクラスのタプルを渡す必要があります。

このメソッドは、オブジェクトがいずれかのクラスのインスタンスである場合は true を返し、そうでない場合は false を返します。

Native
Python isinstance() for Native classes

結果は以下の通りです。

出力:

Python isinstance examples with user defined classes
Example With User-Defined Classes

ここでは、前の例で使用したのと同じクラス dt と tm を使用します。

しかし、この場合、2つのクラスのタプルを isinstance() メソッドに渡します。

a と b は渡したタプル内のいずれかのクラスのインスタンスなので、両方の出力に true が表示されます。

まとめ

この記事では、Pythonの isinstance() メソッドについて、その使い方や動作とともに学びました。

このチュートリアルがインスタンスの概念を理解するのに役立つことを願っています。

タイトルとURLをコピーしました