Две важные вещи.
Во-первых, атрибуты уровня класса являются общими для всех экземпляров класса. Как static
в Java. Из вашего вопроса не ясно, действительно ли вы говорите об атрибутах уровня класса.
Как правило, большая часть ОО-программирования выполняется с переменными экземпляра, как это.
class Foo(object):
def __init__():
self._bool1 = True
self._bool2 = False
self._bool3 = True
#et cetera
Второй пункт. Мы не тратим много времени на проверку типов аргументов.
Если таинственный «кто-то» предоставит данные неверного типа, наш класс потерпит крах, и это в значительной степени лучший результат.
Суета с проверкой типа и домена - это большая работа, чтобы ваш класс потерпел крах в другом месте. В конечном счете, исключение (TypeError
) остается тем же, поэтому дополнительная проверка имеет мало практического значения.
Действительно, дополнительная проверка домена может (и часто делает) иметь неприятные последствия, когда кто-то создает альтернативную реализацию bool
, и ваш класс отклоняет этот совершенно допустимый класс, который имеет все те же функции, что и встроенный bool
.
Не путайте проверку диапазона ввода человеком с проверкой типа Python. Вводимый человеком (или материал, который вы читаете из файлов или URI) должен быть проверен диапазон , но не проверен тип. Часть приложения, которая выполняет чтение внешних данных , определяет тип. Не нужно проверять тип. Таких загадок не будет.
Сценарий «что если я использую неправильный тип и моя программа работает, но не работает», на самом деле не имеет никакого смысла. Во-первых, найдите два типа, которые ведут себя одинаково, но дают слегка разных результатов. Единственный пример - int
против float
, и единственное время, которое действительно имеет значение, касается деления, и об этом позаботятся два оператора деления.
Если вы «случайно» используете строку, где требовалось число, ваша программа умрет. Достоверно. Последовательно.