Мне не понятна ваша мотивация отклонять экземпляры подклассов (учитывая, что по определению они поддерживают все поведение, поддерживаемое суперклассом!), Но если вы действительно настаиваете на этом, то:
if type(arg) is not datetime.date:
raise TypeError('arg must be a datetime.date, not a %s' % type(arg))
Не используйте assert
, за исключением проверки работоспособности во время разработки (при работе с python -o
он превращается в неактивное состояние), и не вызывайте неправильный тип исключения (например, AssertionError
когда TypeError
- это то, что вы здесь имеете в виду).
Использование isinstance
, а затем исключение одного конкретного подкласса не является правильным способом получения строго определенного точного типа с исключенными подклассами: в конце концов, пользователь вполне может подкласс datetime.date
и добавить, что бы вы ни были продолжайте избегать, отвергая экземпляры datetime.datetime
специально! -)