Nomad
> self["fu"]
Просто руки оторвать, за захардкоженную строковую константу, нормальный человек сделал бы
self[STR_FOO] =
и волосы остались бы "мягкими и шелковистыми" (с).
Nomad
Пихтон (CPython конкретно) вообще-то компилируется в байткод, и там даже оптимизации какие-то есть
Nomad
Лицо попроще сделай, гуру
Python code is compiled automatically the first time it is run, by the CPython (standard Python) interpreter.
Ну формально они могут так писать, но по сути факт того что программа вида
if datetime.now().hour >= 12: from noexistant_package import foo else: print( "mom look i'm COMPILED")
будет работать первую половину дня говорит о том что текст просто переводится в байткод
и я догадываюсь что это не та "компиляция" которую тут подразумевает большинство людей, особенно приводя в пример компиляцию Java
0iStalker
> счастливой отладки
Первый же банальный юнит-тест конструктора такое отловит. Вообще-то это обычная практика в любом языке писать тесты на то, что конструктор создаёт объект с ожидаемыми внутренностями. А то потом какой-нибудь Вася зайдёт и сотрёт что-нибудь или перепишет так, что компилироваться всё ещё будет, но логика будет нарушена и "счастливой отладки". А так один раз написал тест и голова больше не болит.
Zefick
> Первый же банальный юнит-тест конструктора такое отловит.
Не отловит, ведь в конструкторе нет проблем. И во-вторых, давайте теперь к каждой программе половину компилятора здорового человека писать... да нафиг нужен этот геморрой. Насчёт тестов, - это удел крупных компаний, в маленьких конторах никто не даст тратит ресурсы на них, максимум логи писать.
0iStalker
> Насчёт тестов, - это удел крупных компаний, в маленьких конторах никто не даст
> тратит ресурсы на них
ага, давай хреначить код просто так
0iStalker
> Не отловит, ведь в конструкторе нет проблем.
В конструкторе проблема нарушения логики. Странно, что ты дурачка ломаешь, ведь сам же этот пример написал с намёком на то, что там что-то не так, а теперь утверждаешь, что нет проблем. Раз нет проблем, то о чём тогда разговор?
Вот элементарный тест, который находит проблему:
x = SomeClass(42) assertTrue(x.foo == 42)
> Насчёт тестов, - это удел крупных компаний
Это удел компаний, в которых умеют правильно писать код. То, что они в последствии становятся крупными это уже следствие.
> в маленьких конторах никто не даст тратит ресурсы на них
Ну так тогда надо говорить не про маленькие конторы, а про конторы, у которых нет денег, это разные вещи. А денег у них нет потому что тратят их на всякую ерунду типа лишнего тестирования и отладку багов, которые можно было бы предотвратить заранее.
Zefick
> Первый же банальный юнит-тест конструктора такое отловит.
Всё верно. А если еще и перестать палкой по камню стучать, и заменить Notepad на норм ИДЕ, то любая норм иде сразу все красным замажет в том месте где ты вдруг в юзер коде используешь поле, которое никогда не обьявлялось на классе или в конструкторе.
Проблема высосана из пальца, причем даже высосана некорректно
0iStalker
> Не отловит, ведь в конструкторе нет проблем
В питоне для частичной гарантии от опечаток в названиях полей есть __slots__ . Частичной - потому что запуститься коду с опечаткой все равно даст. Но вот пройти место с опечаткой уже не даст, то есть "счастливой отладки" не потребуется, косяк вылезет исключением при первом же выполнении опечатки.
0iStalker
> А можно изначально был сделать так, чтобы не наступать на такие детские грабли?
Нельзя, потому что идеология питона в отношении объектов совершенно другая. В самом языке у объектов вообще нет ни полей, ни методов ни свойств. Есть только операция атрибутирования (операция "точка", magic-методы __getattr__/__setattr__/__delattr__) и сопряженный с ней интерфейс дескрипторов (magic-методы __get__/__set__/__del__). То есть то, что пишется после точки - это сугубо динамическая вещь.
А стандартное поведение с полями/слотами и bound-методами - это уже реализация операций атрибутирования и декскрипторов в builtins в стдлибе для объектов тех классов, что созданы через синтаксис class с дефолтным метаклассом type. И как уже сказал выше, в качестве костыля, частично ограничивающего динамику, прикручен механизм слотов (тоже прикручено через реализацию в builtins в стдлибе).
Dmitry_Milk
> "счастливой отладки" не потребуется, косяк вылезет исключением при первом же
> выполнении опечатки.
ты спроси у него про исключения
0iStalker
> self[STR_FOO]
А это мы как раз обсуждали в соседней теме - удачни на каждый чих-пук перекомпилировать по 20 минут весь проект
Nomad
> удачни на каждый чих-пук перекомпилировать по 20 минут весь проект
ну не каждый же
Тема в архиве.