Я разрабатываю приложение Python, где мне нужно много раз, чтобы проверить, является ли объект подклассом модели БД.issubclass вызывает исключение, если первый аргумент не является классом
Я сделал свою собственную функцию, чтобы сделать это:
def isModel(obj):
return isinstance(obj, type) and issubclass(obj, Model)
issubclass
вызывает исключение из OBJ не класс, но я хотел бы она просто возвращает значение False, если obj
не является классом.
Я думал, что лучше сделать еще одну функцию, чтобы использовать вместо встроенного issubclass
:
def _issubclass(obj, Klass):
return isinstance(obj, type) and issubclass(obj, Klass)
Но почему встроенный issubclass
не было сделано, как это? В чем причина? Я что-то упускаю?
UPDATE:
У меня есть модели:
class BaseModel(object):
id = Field(...)
class MyModel(BaseModel):
deleted = Field(...)
В функции я хочу проверить, если аргумент является BaseModel
:
def update_model(model):
assert isinstance(model, type) and issubclass(model, BaseModel), 'Must be a model'
issubclass
отвечает на вопрос если объект является подклассом данного класса. Если объект является экземпляром класса, поэтому ответ IMO должен быть «Нет, ваш объект не является подклассом BaseModel, потому что он не является классом вообще».
В Python вполне нормально, а не if something is not None or len(something) != 0
использовать if something
и не поднимать TypeError
. Какова полезность повышения TypeError, если первый аргумент issubclass
не является классом?
Например, кто-то спрашивает собаку: «Вы правы, чтобы решить эту задачу?», И вместо того, чтобы отвечать «Нет», собака говорит: «Я не мужчина». Я спросил кого-то одно (это подкласс), и он не ответил на мой вопрос.
Поднятие 'TypeError' кажется мне совершенно естественным делом ... оно поощряет правильное выполнение вещей. Вы пытаетесь дать плохие данные 'issubclass'; так же как 'float ('foo')' будет поднимать значение ValueError, а не возвращать 'float ('nan')', как это было бы на некоторых языках, это просто способ Python делать вещи. Если вы работаете на статически типизированном языке, он обычно задыхается во время компиляции. –