Объявление. Определение. Инициализация

Запишу в чём разница, чтоб закрепить в голове.

Объявление

Это когда для «всех» объявляем что мы будем использовать нечто с определённым именем и определённого типа. Никто не знает что «это» из себя представляет. Как с ним взаимодействовать и что «оно» в себе содержит?

Определение.

Это когда мы говорим что «ЭТО» с таким то именем работает вот так то и устроено так то. Таким образом «все» присутствующие кроме имени также теперь имеют представление что это такое, как оно выглядит и как с ним работать.

Инициализация

Это когда уже зная название, внешний вид, внутреннюю конструкцию , мы говорим что этот объект/сущность содержит в себе вот такое конкретное значение. То есть — она НЕ пустая теперь. А заполненная.

Абстрактный пример из окружающего мира:

Объявление

мы будем использовать чашку

но какую?

Определение

это чашка снаружи зелёная, внутри белая, её высота 10см, её диаметр 7 см, она выдерживает температуру до 200 градусов и пригодна для пищевых напитков. У неё нет крышки а стенки тонкие — она не годится для сохранении температуры содержимого длительное время.

а что в ней есть?

Инициализация

В чашку (согласно определению выше) налит чай чёрный с лимоном и сахаром. Горячий

Python, class, self. Немного о том что такое self в конструкторе класса и зачем он(и в методах класса). Моё понимание

Данная интерпретация имеет свободный характер и не претендует на истину последней инстанции.

Я понимаю это так. Когда создаём объект класса, то отдельно в памяти выделяется под неё место, куда записываются имя объекта, параметры (унаследованные от родительского класса) и их значения (заполненные конструктором класса). Но также объект наследует от своего класса и методы. Но метод это не переменная. Это некий программный код, который имеет входные значения, что-то с ними делает и выдаёт или нет результат. Значит нет необходимости дублировать код методов для каждого объекта — он будет для всех объектов одинаков. Потому он хранится (код методов ) в единичном экземпляре где-то в теле класса. И если для конкретного объекта необходимо вызвать его метод — то программа в этом месте просто переходит к тому самому, единственному экземпляру кода этого метода, который хранится в классе — передаёт ему на вход параметры и выполняет его. Но если код единственный, то как он поймёт с данными какого объекта он сейчас работает? Вот для этого и используется self — здесь неявно передаётся указатель на конкретный объект. И когда метод выполняется и внутри него есть сочетание self.переменная — то программа понимает что вместо self на самом деле как бы можно поставить имя конкретного объекта. И обращение происходит к конкретной переменной конкретного объекта.

Почему неявно передаётся указатель на объект? Потому, что при вызове метода объекта — мы не передаём имя объекта в качестве параметров. Обычно мы вызываем метод в виде Объект.Его_метод(параметры,..). Мы в начале указываем имя объекта. Это для простоты понимания кода. Но в само деле выглядит это как Класс.Его_метод(указатель_на_объект,параметры,….)

Оставлю себе на память.

Onenote low speed text enteryng медленный ввод текста

Уже не единожды сталкиваюсь с проблемой в программе Onenote: когда я набираю текст, то в окне ввода он отображается с задержкой порядка 1-2 секунды. Что дико бесит.

Проблема кроется в ошибке синхронизации. Если выставлена автоматическая синхронизация книг и возникает какая то ошибка — программа пытается выполнить синхронизацию во что бы то ни стало. Если машина слабая — то заметно как программа тормозит с обработкой команд ввода от оператора.

Решение: просто перевёл синхронизацию книг в ручной режим. Теперь можно работать гораздо комфортнее.

Шахматы next

Идейка в голову пришла. Возможно бредовая. Однако.

Что если немного изменить стандартные правила в игре Шахматы? А именно: позволить игрокам выставлять фигуры в пределах первых двух рядов но в любом порядке и в любой позиции. Остальные правила согласно классических Шахмат. И игрок должен выставить все фигуры. Ещё для разнообразия можно разделять поле вертикальным листом, закрывающим обзор позиции фигур противника. Тогда получится что игроки стартуют с разной стартовой конфигурацией войск. Традиционные тактики вроде «мат в столько то ходов» уже не сработают. Также сложнее предугадать — как выставит свои войска противник. Что затрудняет продумывание тактики наперёд.

По поводу таких вещей как Рокировка и подобное — всё согласно базовым правилам. Если игрок планирует воспользоваться рокировкой, тогда он должен в стартовой конфигурации расположить Короля и Ладью на одной линии (горизонтальной или вертикальной)