Python issubclass() 関数
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
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
コードの説明:
- サブクラスは親クラスのサブクラスです。
- 間接継承(孫クラス)も祖先クラスのサブクラスです。
例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
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()}")
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 組み込み関数