#python
#python
Вопрос:
Я бы хотел issubclass(1, str)
вернуть false, 1
не является подклассом str
. Поскольку это вообще не класс, я получаю TypeError .
Есть ли хороший способ проверить это, не прибегая к try, except
?
try:
if issubclass(value, MyClass):
do_stuff()
except TypeError:
pass
Ответ №1:
Кажется, вы хотите isinstance:
>>> isinstance(1, str)
False
Ответ №2:
import inspect
def isclassandsubclass(value, classinfo):
return inspect.isclass(value) and issubclass(value, classinfo)
Ответ №3:
Без импорта какого-либо модуля:
def issubclass_(c, clazz):
return isinstance(c, type) and issubclass(c, clazz)
Ответ №4:
Не уверен, какова ваша база данных, но проверка по классу или экземпляру класса — это слишком разные вещи (и у них разные методы API: issubclass() vs. isinstance()).
Поэтому вам всегда нужно проверять, является ли ваш ‘item’ экземпляром чего-либо класса.
>
>> (1).__class__
<type 'int'>
>>> (1).__class__.__class__
<type 'type'>
Ответ №5:
вы могли бы просто проверить перед вызовом issubclass()
:
import types
def myissubclass (c, sc):
if type(c) != types.ClassType
return False
return issubclass (c, sc)
но я думаю, что было бы более питонически использовать исключения:
def myissubclass (c, sc):
try:
return issubclass (c, sc)
except TypeError:
return False