Python issubclass()-Funktion
Python3 integrierte Funktionen
issubclass()Es ist eine integrierte Funktion in Python, mit der geprüft wird, ob eine Klasse eine Unterklasse einer anderen Klasse ist.
issubclass()Es wird verwendet, um die Vererbungsbeziehung zwischen Klassen zu bestimmen, und kann direkte und indirekte Unterklassen prüfen.
Wortdefinitionen: issubclass 是 is a subclass(是一个子类)的缩写。
Grundlegende Syntax und Parameter
Syntax
issubclass(class, classinfo)
Parameterbeschreibung
- Parameter class:
- Typ: class
- Beschreibung: Die zu prüfende Klasse.
- Parameter classinfo:
- Typ: class oder Tupel von Klassen
- Beschreibung: Die übergeordnete Klasse oder ein Tupel von Klassen, gegen die geprüft werden soll.
Funktionsbeschreibung
- Rückgabewert: Gibt einen booleschen Wert zurück
TrueoderFalse。 - Merkmal: Eine Klasse wird immer als Unterklasse von sich selbst betrachtet.
Beispiele
Beispiel 1: Grundlegende Verwendung
Beispiel
# Klassendefinition
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Husky(Dog):
pass
# Vererbungsbeziehung prüfen
print(issubclass(Dog, Animal)) # Ausgabe: True
print(issubclass(Cat, Animal)) # Ausgabe: True
print(issubclass(Dog, Cat)) # Ausgabe: False
# Indirekte Vererbung
print(issubclass(Husky, Animal)) # Ausgabe: True (Vererbungskette: Husky -> Dog -> Animal)
print(issubclass(Husky, Dog)) # Ausgabe: True
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Husky(Dog):
pass
# Vererbungsbeziehung prüfen
print(issubclass(Dog, Animal)) # Ausgabe: True
print(issubclass(Cat, Animal)) # Ausgabe: True
print(issubclass(Dog, Cat)) # Ausgabe: False
# Indirekte Vererbung
print(issubclass(Husky, Animal)) # Ausgabe: True (Vererbungskette: Husky -> Dog -> Animal)
print(issubclass(Husky, Dog)) # Ausgabe: True
Erwartete Ausgabe:
True True False True True
Codeanalyse:
- Die Unterklasse ist eine Unterklasse der Elternklasse.
- Indirekte Vererbung (die Enkelklasse) ist ebenfalls eine Unterklasse der Vorfahrenklasse.
Beispiel 2: Ein Tupel von Klassen verwenden
Beispiel
# Prüfen, ob es zu mehreren Klassen gehört
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Robot:
pass
print(issubclass(Dog, (Animal, Robot))) # Ausgabe: True
print(issubclass(Dog, (Cat, Robot))) # Ausgabe: False
# Eine Klasse ist auch eine Unterklasse von sich selbst
print(issubclass(int, int)) # Ausgabe: True
print(issubclass(str, str)) # Ausgabe: True
# Abstrakte Basisklasse
from collections.abc import MutableSequence
print(issubclass(list, MutableSequence)) # Ausgabe: True
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Robot:
pass
print(issubclass(Dog, (Animal, Robot))) # Ausgabe: True
print(issubclass(Dog, (Cat, Robot))) # Ausgabe: False
# Eine Klasse ist auch eine Unterklasse von sich selbst
print(issubclass(int, int)) # Ausgabe: True
print(issubclass(str, str)) # Ausgabe: True
# Abstrakte Basisklasse
from collections.abc import MutableSequence
print(issubclass(list, MutableSequence)) # Ausgabe: True
Tatsächliche Ausgabe:
Gib das Ergebnis entsprechend den tatsächlichen Laufzeitbedingungen aus.
Codeanalyse:
- Du kannst prüfen, ob es zu einer von mehreren Klassen gehört.
- Eine Klasse ist immer eine Unterklasse von sich selbst.
Beispiel 3: Praktische Anwendung
Beispiel
# Polymorphismus-Implementierung
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
# Typ prüfen
shapes = [Circle(5), Rectangle(3, 4), Circle(2)]
for shape in shapes:
if issubclass(type(shape), Shape):
print(f"Fläche: {shape.area()}")
# isinstance verwenden (empfohlen)
for shape in shapes:
if isinstance(shape, Shape):
print(f"Fläche der Form: {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
# Typ prüfen
shapes = [Circle(5), Rectangle(3, 4), Circle(2)]
for shape in shapes:
if issubclass(type(shape), Shape):
print(f"Fläche: {shape.area()}")
# isinstance verwenden (empfohlen)
for shape in shapes:
if isinstance(shape, Shape):
print(f"Fläche der Form: {shape.area()}")
Ausgabe:
Bei Ausführung in der tatsächlichen Umgebung wird die Fläche jeder Form ausgegeben.
Hinweis: In der tatsächlichen Programmierung verwendet man normalerweiseisinstance()stattissubclass(type())。
Python3 integrierte Funktionen
Andere Erweiterungen