Python issubclass() 関数

Python3 内置函数Python3 組み込み関数


issubclass()Python において、クラスが別のクラスのサブクラスであるかをチェックするための組み込み関数です。

issubclass()クラス間の継承関係を判定するために使用され、直接サブクラスと間接サブクラスをチェックできます。

用語の意味: issubclass 是 is a subclass(是一个子类)的缩写。


基本構文と引数

構文形式

issubclass(class, classinfo)

引数の説明

  • 引数 class:
    • 型: クラス
    • 説明: チェックするクラス。
  • 引数 classinfo:
    • 型: クラスまたはクラスタプル
    • 説明: 親クラスまたはチェック対象のクラスタプル。

関数の説明

  • 戻り値: ブール値を返すTrue 或 False。
  • 特徴: クラスは常に自身のサブクラスと見なされます。

例

例1:基本的な使い方

例

# クラス定義
class Animal:
    pass

class Dog(Animal):
    pass

class Cat(Animal):
    pass

class Husky(Dog):
    pass

# 継承関係をチェック
print(issubclass(Dog, Animal))    # 出力: True
print(issubclass(Cat, Animal))    # 出力: True
print(issubclass(Dog, Cat))       # 出力: False

# 間接継承
print(issubclass(Husky, Animal))   # 出力: True(継承チェーン:Husky -> Dog -> Animal)
print(issubclass(Husky, Dog))      # 出力: True

実行結果の予想:

True
True
False
True
True

コードの説明:

  1. サブクラスは親クラスのサブクラスです。
  2. 間接継承(孫クラス)も祖先クラスのサブクラスです。

例2:クラスタプルを使用

例

# 複数のクラスのいずれかに属するかをチェック
class Animal:
    pass

class Dog(Animal):
    pass

class Cat(Animal):
    pass

class Robot:
    pass

print(issubclass(Dog, (Animal, Robot)))  # 出力: True
print(issubclass(Dog, (Cat, Robot)))      # 出力: False

# クラス自身も自分のサブクラス
print(issubclass(int, int))    # 出力: True
print(issubclass(str, str))    # 出力: True

# 抽象基底クラス
from collections.abc import MutableSequence
print(issubclass(list, MutableSequence))  # 出力: True

実際の実行結果:

実際の実行状況に応じて結果が出力されます。

コードの説明:

  • 複数のクラスのうち任意の1つに属するかをチェックできます。
  • クラスは常に自身のサブクラスです。

例3:実践的な応用

例

# ポリモーフィズムの実装
class Shape:
    def area(self):
        raise NotImplementedError

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius ** 2

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

# 型をチェック
shapes = [Circle(5), Rectangle(3, 4), Circle(2)]
for shape in shapes:
    if issubclass(type(shape), Shape):
        print(f"面积: {shape.area()}")

# isinstanceを使用(推奨)
for shape in shapes:
    if isinstance(shape, Shape):
        print(f"形状面积: {shape.area()}")

実行結果:

実際の環境で実行すると、各形状の面積が出力されます。

注意:実際のプログラミングでは通常isinstance()ではなくissubclass(type())。


Python3 内置函数Python3 組み込み関数


その他の拡張