Función Python issubclass()
Funciones integradas de Python3
issubclass()Es una función integrada en Python que se utiliza para comprobar si una clase es subclase de otra.
issubclass()Se utiliza para determinar las relaciones de herencia entre clases, y puede comprobar subclases directas e indirectas.
Definición de términos: issubclass 是 is a subclass(是一个子类)的缩写。
Sintaxis básica y parámetros
Formato de sintaxis
issubclass(class, classinfo)
Descripción de parámetros
- Parámetro class:
- Tipo: clase
- Descripción: la clase a comprobar.
- Parámetro classinfo:
- Tipo: clase o tupla de clases
- Descripción: la clase base o la tupla de clases a comprobar.
Descripción de la función
- Valor de retorno: Devuelve un valor booleano
TrueoFalse。 - Características: Una clase siempre se considera subclase de sí misma.
Ejemplos
Ejemplo 1: Uso básico
Ejemplo
# Definición de clase
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Husky(Dog):
pass
# Comprobar relación de herencia
print(issubclass(Dog, Animal)) # Salida: True
print(issubclass(Cat, Animal)) # Salida: True
print(issubclass(Dog, Cat)) # Salida: False
# Herencia indirecta
print(issubclass(Husky, Animal)) # Salida: True (cadena de herencia: Husky -> Dog -> Animal)
print(issubclass(Husky, Dog)) # Salida: True
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Husky(Dog):
pass
# Comprobar relación de herencia
print(issubclass(Dog, Animal)) # Salida: True
print(issubclass(Cat, Animal)) # Salida: True
print(issubclass(Dog, Cat)) # Salida: False
# Herencia indirecta
print(issubclass(Husky, Animal)) # Salida: True (cadena de herencia: Husky -> Dog -> Animal)
print(issubclass(Husky, Dog)) # Salida: True
Resultado esperado de ejecución:
True True False True True
Análisis del código:
- Una subclase es subclase de su clase padre.
- La herencia indirecta (clase nieta) también es subclase de la clase antecesora.
Ejemplo 2: Uso de tuplas de clases
Ejemplo
# Comprobar si pertenece a varias clases
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Robot:
pass
print(issubclass(Dog, (Animal, Robot))) # Salida: True
print(issubclass(Dog, (Cat, Robot))) # Salida: False
# La clase misma también es subclase de sí misma
print(issubclass(int, int)) # Salida: True
print(issubclass(str, str)) # Salida: True
# Clase base abstracta
from collections.abc import MutableSequence
print(issubclass(list, MutableSequence)) # Salida: True
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Robot:
pass
print(issubclass(Dog, (Animal, Robot))) # Salida: True
print(issubclass(Dog, (Cat, Robot))) # Salida: False
# La clase misma también es subclase de sí misma
print(issubclass(int, int)) # Salida: True
print(issubclass(str, str)) # Salida: True
# Clase base abstracta
from collections.abc import MutableSequence
print(issubclass(list, MutableSequence)) # Salida: True
Resultado real de ejecución:
El resultado se genera según la ejecución real.
Análisis del código:
- Permite comprobar si pertenece a cualquiera de varias clases.
- Una clase siempre es subclase de sí misma.
Ejemplo 3: Aplicación práctica
Ejemplo
# Implementación de polimorfismo
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
# Comprobar tipo
shapes = [Circle(5), Rectangle(3, 4), Circle(2)]
for shape in shapes:
if issubclass(type(shape), Shape):
print(f"Área: {shape.area()}")
# Usar isinstance (recomendado)
for shape in shapes:
if isinstance(shape, Shape):
print(f"Área de la forma: {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
# Comprobar tipo
shapes = [Circle(5), Rectangle(3, 4), Circle(2)]
for shape in shapes:
if issubclass(type(shape), Shape):
print(f"Área: {shape.area()}")
# Usar isinstance (recomendado)
for shape in shapes:
if isinstance(shape, Shape):
print(f"Área de la forma: {shape.area()}")
Resultado de ejecución:
Al ejecutarse en un entorno real, se mostrará el área de cada forma.
Nota: En la programación real normalmente se usaisinstance()en lugar deissubclass(type())。
Funciones integradas de Python3
Otras extensiones